Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define inf 999999
- using namespace std;
- class Node
- {
- public:
- int parent,key,number;
- bool mst;
- vector< pair<int,int> > adj;
- bool operator<(const Node &obj)const
- {
- return key>obj.key;
- }
- };
- int main()
- {
- int vertex,edges;
- cout<< "how many vertex and edges? ";
- cin>>vertex>>edges;
- Node node[vertex];
- for(int i=0; i<vertex; i++)
- {
- node[i].key=inf;
- node[i].mst=false;
- node[i].parent=-1;
- node[i].number=i;
- }
- vector<int> neg;
- for(int i=0; i<edges; i++)
- {
- int u,v,w;
- cin>>u>>v>>w;
- neg.push_back(w);
- node[u].adj.push_back(make_pair(v,w));
- node[v].adj.push_back(make_pair(u,w));
- }
- for(int i=0; i<neg.size(); i++)
- {
- if(neg[i]<0)
- {
- cout<< "Not possible. this algorithm can not handled negative edges"<<endl;
- return 0;
- }
- }
- int r;
- cout<< "Enter source vertex:";
- cin>>r;
- node[r].key=0;
- priority_queue<Node>pq;
- pq.push(node[r]);
- string s="";
- while(!pq.empty())
- {
- Node obj=pq.top();
- int u=obj.number;
- pq.pop();
- if(node[u].mst==false)
- {
- node[u].mst=true;
- cout<<"vertex: "<< node[u].number<< " Distance : "<< node[u].key<<endl;
- s+=" "+to_string(node[u].number);
- cout<< "Path: "<<s<<endl;
- for(int i=0; i<node[i].adj.size(); i++)
- {
- int v= node[u].adj[i].first;
- int w=node[u].adj[i].second;
- if(node[v].mst==false&&node[u].key+w<node[v].key)
- {
- node[v].key=node[u].key+w;
- node[v].parent=node[u].number;
- pq.push(node[v]);
- }
- }
- }
- }
- neg.clear();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement