Masfiq_ds_algo

ALGR: Dijkstra:BFS_directed_weighted_shortest path

Apr 13th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.78 KB | None | 0 0
  1.  
  2. #include<cstdio>
  3. #include<vector>
  4. #include<queue>
  5. #include<cstdlib>
  6. #define INF 2147483647 // 2^31 - 1
  7. using namespace std;
  8.  
  9. void Dijkstra_BFS_weighted_directed(vector<vector<pair<int,int>>> gr, int src)
  10. {
  11.     int distance[gr.size()] ;// keeps shortest distance from source to node
  12.     fill_n(distance, gr.size(), INF);
  13.     distance[src] = 0;
  14.     priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> q;// using priority queue will reduce complexity
  15.     q.push(make_pair(distance[src], src));
  16.     while(!q.empty())
  17.     {
  18.         int u=q.top().second;
  19.         q.pop();
  20.         for(int i=0; i<gr[u].size(); i++)
  21.         {
  22.             int v = gr[u][i].first;
  23.             int cost_of_uv = gr[u][i].second;
  24.             if(distance[u]+cost_of_uv < distance[v])
  25.             {
  26.                 distance[v] = distance[u]+cost_of_uv;
  27.                 q.push(make_pair(distance[v],v));
  28.             }
  29.         }
  30.     }
  31.     // printing distance of all nodes
  32.     printf("Distance from src=%d to...\n", src);
  33.     for(int i=1; i< gr.size(); i++){
  34.         printf("%d: %d\n", i, distance[i]);
  35.     }
  36. }
  37.  
  38. int main()
  39. {
  40.     int n, e;
  41.     scanf("%d %d", &n, &e);
  42.     vector<vector<pair<int,int>>> gr;//
  43.  
  44.     gr.clear();
  45.     gr.resize(n+1);
  46.     // taking input for directed-weighted graph
  47.     for(int i=0; i<e; i++)
  48.     {
  49.         int u,v,w;
  50.         scanf("%d %d %d", &u, &v, &w);
  51.         gr[u].push_back(make_pair(v,w));
  52.         //gr[v].push_back(make_pair(u,w));
  53.     }
  54.     Dijkstra_BFS_weighted_directed(gr, 4);
  55.      //printing list
  56. //    for(int i=1; i<gr.size(); i++){
  57. //        printf("%d: ", i);
  58. //        for(int j=0; j<gr[i].size(); j++){
  59. //            printf("->%d( %d )", gr[i][j].first, gr[i][j].second);
  60. //        }
  61. //        printf("\n");
  62. //    }
  63.  
  64.  
  65. }
Add Comment
Please, Sign In to add comment