Advertisement
_ash__

Untitled

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