Advertisement
sakib_shahriyar

BellmanFord

Feb 27th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.85 KB | None | 0 0
  1. -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*BELLMANFORD*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  2. #include <bits/stdc++.h>
  3.  
  4. using namespace std;
  5.  
  6. const int MAX_NODE = 1000;
  7. const int INF = 1e9;
  8.  
  9. vector <int> graph[ MAX_NODE ], cost[ MAX_NODE ];
  10. int dist[ MAX_NODE ], node , edge ;
  11. bool visit[ MAX_NODE ];
  12.  
  13. void ini()
  14. {
  15.      for( int i = 1 ; i <= node ; i++ )
  16.     {
  17.         visit[i] = 0;
  18.         dist[ i ] = INF;
  19.         graph[i].clear();
  20.         cost[i].clear();
  21.     }
  22. }
  23.  
  24. void constructGraph()
  25. {
  26.  
  27.     cin >> node >> edge;
  28.     ini();
  29.     int x , y, c;
  30.     for( int i = 0 ; i < edge ; i++ )
  31.     {
  32.        cin >> x >> y >> c;
  33.        graph[x].push_back(y);
  34.        graph[y].push_back(x);
  35.        cost[x].push_back(c);
  36.        cost[y].push_back(c);
  37.     }
  38. }
  39.  
  40. void bellmanford(int source)
  41. {
  42.     dist[source] = 0;
  43.     for( int i = 1 ; i < node ; i++ )
  44.     {
  45.         for( int j = 1 ; j <= node ; j++ )
  46.         {
  47.             int sz = graph[j].size();
  48.             for( int k = 0 ; k < sz ; k++ )
  49.             {
  50.                 int nxt = graph[j][k];
  51.                 if(dist[nxt] > dist[j] + cost[j][k] )
  52.                 {
  53.                     dist[nxt] = dist[j] + cost[j][k];
  54.                 }
  55.             }
  56.         }
  57.     }
  58.  
  59.     for( int j = 1 ; j <= node ; j++ )
  60.         {
  61.             int sz = graph[j].size();
  62.             for( int k = 0 ; k < sz ; k++ )
  63.             {
  64.                 int nxt = graph[j][k];
  65.                 if(dist[nxt] > dist[j] + cost[j][k] )
  66.                 {
  67.                     printf("negative edge detected... ");
  68.                     return ;
  69.                 }
  70.             }
  71.         }
  72.  
  73.  
  74.     for( int i = 1; i <= node ; i++ )
  75.     {
  76.         printf("node :: %d dist :: %d\n",i , dist[i]);
  77.     }
  78. }
  79.  
  80. int main()
  81. {
  82.     constructGraph();
  83.     bellmanford(1);
  84.  
  85.     return 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement