Advertisement
Araf_12

Dijkstra Algorithm

Jan 31st, 2023 (edited)
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.27 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <queue>
  4. #include <functional>
  5.  
  6. using namespace std;
  7.  
  8. const int MAX = 1e4 + 5;
  9. vector<pair<int, int>> adj[MAX];
  10. bool visited[MAX];
  11. int dist[MAX];
  12.  
  13. void Dijkstra(int start)
  14. {
  15.     for (int i = 0; i < MAX; i++)
  16.         dist[i] = INT_MAX;
  17.  
  18.     priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
  19.     pq.push({0, start});
  20.     dist[start] = 0;
  21.  
  22.     while (!pq.empty())
  23.     {
  24.         int u = pq.top().second;
  25.         pq.pop();
  26.  
  27.         if (visited[u])
  28.             continue;
  29.  
  30.         visited[u] = true;
  31.  
  32.         for (int i = 0; i < adj[u].size(); i++)
  33.         {
  34.             int v = adj[u][i].first;
  35.             int weight = adj[u][i].second;
  36.  
  37.             if (dist[v] > dist[u] + weight)
  38.             {
  39.                 dist[v] = dist[u] + weight;
  40.                 pq.push({dist[v], v});
  41.             }
  42.         }
  43.     }
  44. }
  45.  
  46. int main()
  47. {
  48.     int V, E, u, v, w;
  49.     cin >> V >> E;
  50.  
  51.     for (int i = 0; i < E; i++)
  52.     {
  53.         cin >> u >> v >> w;
  54.         adj[u].push_back({v, w});
  55.         adj[v].push_back({u, w});
  56.     }
  57.  
  58.     int start;
  59.     cin >> start;
  60.     Dijkstra(start);
  61.  
  62.     for (int i = 0; i < V; i++)
  63.         cout << i << " " << dist[i] << endl;
  64.  
  65.     return 0;
  66. }
  67.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement