Advertisement
Guest User

Dijkstra_problem

a guest
Oct 23rd, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.95 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define inf 999999
  3. using namespace std;
  4. class Node
  5. {
  6. public:
  7.     int parent,key,number;
  8.  
  9.     bool mst;
  10.  
  11.     vector< pair<int,int> > adj;
  12.  
  13.     bool operator<(const Node &obj)const
  14.     {
  15.         return key>obj.key;
  16.     }
  17.  
  18.  
  19. };
  20.  
  21. int main()
  22. {
  23.     int vertex,edges;
  24.     cout<< "how many vertex and edges? ";
  25.     cin>>vertex>>edges;
  26.     Node node[vertex];
  27.  
  28.     for(int i=0; i<vertex; i++)
  29.     {
  30.         node[i].key=inf;
  31.         node[i].mst=false;
  32.         node[i].parent=-1;
  33.         node[i].number=i;
  34.     }
  35.  
  36.     vector<int> neg;
  37.     for(int i=0; i<edges; i++)
  38.     {
  39.         int u,v,w;
  40.         cin>>u>>v>>w;
  41.         neg.push_back(w);
  42.  
  43.         node[u].adj.push_back(make_pair(v,w));
  44.         node[v].adj.push_back(make_pair(u,w));
  45.  
  46.     }
  47.  
  48.     for(int i=0; i<neg.size(); i++)
  49.     {
  50.         if(neg[i]<0)
  51.         {
  52.             cout<< "Not possible. this algorithm can not handled negative edges"<<endl;
  53.             return 0;
  54.         }
  55.     }
  56.     int r;
  57.     cout<< "Enter source vertex:";
  58.     cin>>r;
  59.     node[r].key=0;
  60.     priority_queue<Node>pq;
  61.     pq.push(node[r]);
  62.     string s="";
  63.     while(!pq.empty())
  64.     {
  65.         Node obj=pq.top();
  66.         int u=obj.number;
  67.         pq.pop();
  68.  
  69.         if(node[u].mst==false)
  70.         {
  71.             node[u].mst=true;
  72.  
  73.  
  74.             cout<<"vertex: "<< node[u].number<< " Distance : "<< node[u].key<<endl;
  75.             s+=" "+to_string(node[u].number);
  76.             cout<< "Path: "<<s<<endl;
  77.  
  78.  
  79.             for(int i=0; i<node[i].adj.size(); i++)
  80.             {
  81.                 int v= node[u].adj[i].first;
  82.                 int w=node[u].adj[i].second;
  83.  
  84.                 if(node[v].mst==false&&node[u].key+w<node[v].key)
  85.                 {
  86.                     node[v].key=node[u].key+w;
  87.                     node[v].parent=node[u].number;
  88.                     pq.push(node[v]);
  89.                 }
  90.             }
  91.         }
  92.     }
  93.  
  94. neg.clear();
  95.  
  96.     return 0;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement