Advertisement
Israt_afroz

dijkstra

Feb 21st, 2020
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.15 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define MX 105
  4. #define INF 100000000
  5. struct node{
  6. int val;
  7. int cost;
  8. };
  9. class cmp
  10. {public:
  11. bool operator()(node &A,node &B){
  12. if(A.cost>B.cost)return true;
  13. return false;}
  14. };
  15. vector<node>G[MX];
  16. bool vis[MX];
  17. int dist[MX];
  18. void reset()
  19. {
  20. for(int i=0;i<MX;i++)
  21. { G[i].clear();
  22. vis[i]=0;
  23. dist[i]=INF;
  24. }
  25. }
  26. void dijkstra(int source)
  27. { priority_queue<node,vector<node>,cmp>pq;
  28. pq.push({source,0});
  29. while(!pq.empty()){
  30. node current=pq.top();
  31. pq.pop();
  32. int val=current.val;
  33. int cost=current.cost;
  34. if(vis[val]==1)continue;
  35. dist[val]=cost;
  36. vis[val]=1;
  37. for(int i=0;i<G[val].size();i++)
  38. {
  39. int nxt=G[val][i].val;
  40. int nxtcost=G[val][i].cost;
  41. if(vis[nxt]==0)
  42. {pq.push({nxt,cost+nxtcost});
  43. }
  44. }
  45. }}
  46.  
  47. int main() {
  48. int nodes,edges;
  49. cin>>nodes>>edges;
  50. for(int i=1;i<=edges;i++)
  51. {int u,v,w;
  52. cin>>u>>v>>w;
  53. G[u].push_back({v,w});}
  54. int source;
  55. cin>>source;
  56. dijkstra(source);
  57. for(int i=1;i<=nodes;i++)
  58. {cout<<i<<" ";
  59. if(dist[i]==INF) cout<<"INF"<<endl;
  60. else cout<<dist[i]<<endl;
  61. }
  62. return 0;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement