keverman

Bellman-Ford algorithm

Jan 12th, 2019 (edited)
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.74 KB | None | 0 0
  1. struct edge {};
  2.  
  3. // Detects negative cycles in a weighted graph
  4. bool Bellman_Ford(int src, std::vector<std::vector<edge>>& edges)
  5. {
  6.     std::vector<int> distance(edges.size(), 0x3f3f3f3f);
  7.     distance[src] = 0;
  8.  
  9.     for (int i = 0; i < edges.size(); i++)
  10.         for (int from = 0; from < size(); from++)
  11.             if (distance[from] != 0x3f3f3f3f)
  12.                 for (edge& e : edges[from])
  13.                     distance[e.to] = std::min(distance[e.to], e.weight + distance[from]);
  14.  
  15.     for (int from = 0; from < edges.size(); from++)
  16.         if (distance[from] != 0x3f3f3f3f)
  17.             for (edge& e : edges[from])
  18.                 if (distance[from] + e.weight < distance[e.to])
  19.                     return true;
  20.  
  21.     return false;
  22. }
Add Comment
Please, Sign In to add comment