Advertisement
Guest User

Dijkstra

a guest
Jun 12th, 2015
7,659
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.83 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int INF = 2147483647;
  5. const int MAX = 5005;
  6. int D[MAX], N; // Keeps minimum distance to each node
  7. vector<pair<int,int>> E[MAX]; // Adjacency list
  8.  
  9. void dijkstra()
  10. {
  11.     for(int i = 1; i <= N; i++) D[i] = INF;
  12.     D[1] = 0;
  13.     priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q;
  14.     q.push({0,1});
  15.  
  16.     while(!q.empty())
  17.     {
  18.         pair<int,int> p = q.top();
  19.         q.pop();
  20.  
  21.         int u = p.second, dist = p.first;
  22.         if(dist > D[u]) continue;
  23.  
  24.         for(pair<int,int> pr : E[u])
  25.         {
  26.             int v = pr.first;
  27.             int next_dist = dist + pr.second;
  28.  
  29.             if(next_dist < D[v])
  30.             {
  31.                 D[v] = next_dist;
  32.                 q.push({next_dist,v});
  33.             }
  34.         }
  35.     }
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement