Advertisement
sachin-yadav

Dijkstra Algorithm using Priority Queue

Apr 18th, 2024
673
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.28 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. // #include<iostream>
  3. using namespace std;
  4. typedef long long ll;
  5. ll const INF=1e15;
  6.  
  7. void dijkstra(ll N, ll M, ll S, vector<pair<ll, ll>> adj_list[], vector<ll> &dist)
  8. {
  9.     // distance, node_id
  10.     priority_queue<pair<ll,ll>, vector<pair<ll,ll>>, greater<pair<ll,ll>>> pq;
  11.     dist[S] = 0;
  12.     pq.push({0, S});
  13.     while(! pq.empty())
  14.     {
  15.         pair<ll, ll> front_pair = pq.top();
  16.         pq.pop();
  17.  
  18.         ll curr_dist = front_pair.first;
  19.         ll curr_node = front_pair.second;
  20.  
  21.         for (auto &ed: adj_list[curr_node])
  22.         {
  23.             ll neigh_node = ed.first;
  24.             ll neigh_dist = curr_dist + ed.second;
  25.            
  26.             if (dist[neigh_node] > neigh_dist)
  27.             {
  28.                 dist[neigh_node] = neigh_dist;
  29.                 pq.push({dist[neigh_node], neigh_node});
  30.             }
  31.         }
  32.     }
  33. }
  34.  
  35.  
  36.  
  37. int main()
  38. {
  39.     ll T, N, M, S;
  40.     cin >> T;
  41.         while (T--){
  42.             cin >> N >> M;
  43.             vector<pair<ll, ll>> adj_list[N];
  44.             for (ll i = 0; i < M; ++i)
  45.             {
  46.             ll x, y, dist;
  47.             cin >> x >> y >> dist;
  48.             adj_list[x-1].push_back({y-1, dist});
  49.             adj_list[y-1].push_back({x-1, dist});
  50.             }
  51.         cin >> S;
  52.         --S;
  53.         vector<ll> dist(N + 1, INF);
  54.         dijkstra(N, M, S, adj_list, dist);
  55.         for(int i=0; i < N; ++i)
  56.         {
  57.             if (dist[i] >= INF) dist[i] = -1;      
  58.             if (i != S)  cout << dist[i] << " ";
  59.         }
  60.         cout << "\n";
  61.     }
  62.     return 0;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement