Advertisement
_ash__

Untitled

Oct 16th, 2020
2,581
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.75 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. class dijkstra {
  5.     int n; vector<vector<pair<int,int>>> g;
  6. public:
  7.     dijkstra(int n_) { n = n_; g.assign(n, {}); }
  8.     void addEdge(int u, int v, int w) { // adds a bi-directional edge
  9.         g[u].push_back({v, w}); g[v].push_back({u, w});
  10.     }
  11.     vector<int> sp(int src) {
  12.         vector<int> dis(n, -1);
  13.         dis[src] = 0; priority_queue<pair<int,int>> pq; pq.push({0, src});
  14.         while(pq.size() > 0) {
  15.             auto t = pq.top(); pq.pop();
  16.             int u = t.second;
  17.             if(dis[u] != -t.first) continue;
  18.             for(auto nxt : g[u]) {
  19.                 int v = nxt.first, w = nxt.second;
  20.                 if(dis[v] == -1 or dis[v] > dis[u] + w) {
  21.                     dis[v] = dis[u] + w;
  22.                     pq.push({-dis[v], v});
  23.                 }
  24.             }
  25.         }
  26.         return dis;
  27.     }
  28. };
  29.  
  30. int main() {
  31.     int n, m; // n = # of nodes, m = # of edges
  32.     cout << "Enter number of nodes: "; cin >> n;
  33.     cout << "Enter number of edges: "; cin >> m;
  34.     cout << "describe all the edges in form:\nnode1 node2 edge_weight" << endl;
  35.     dijkstra d(n);
  36.     vector<vector<int>> dis(n);
  37.     for(int i = 0; i < m; i++) {
  38.         char a, b; int w;
  39.         cin >> a >> b >> w;
  40.         int u = a - 'A', v = b - 'A';
  41.         d.addEdge(u, v, w);
  42.     }
  43.     for(int src = 0; src < n; src++) dis[src] = d.sp(src);
  44.     cout << "all pair distance using dijkstra:" << endl;
  45.     for(int i = 0; i < n; i++) {
  46.         for(int j = i+1; j < n; j++) {
  47.             char a = i+'A', b = j+'A';
  48.             cout << a << " -> " << b << " : " << dis[i][j] << endl;
  49.         }
  50.     }
  51. }
  52.  
  53. /*
  54.  
  55. 7 10
  56.  
  57. A C 2
  58. A E 1
  59. B C 2
  60. B D 13
  61. B E 1
  62. B F 2
  63. C D 8
  64. D G 1
  65. E F 4
  66. F G 2
  67.  
  68. */
  69.  
  70.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement