Advertisement
Guest User

Untitled

a guest
Nov 20th, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.29 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6.  
  7. struct Edges {
  8.     int firstV;
  9.     int secondV;
  10.     int weight;
  11.     Edges(int f, int s, int w) : firstV(f), secondV(s), weight(w) {};
  12.     Edges() :firstV(0), secondV(0), weight(0) {};
  13. };
  14.  
  15. void initialize(int s, int vertex, vector<int>& result, vector<int>& previous) {
  16.     for (int v = 0; v < vertex; ++v) {
  17.         result[v] = 30000;
  18.         previous[v] = 0;
  19.     }
  20.     result[s] = 0;
  21. }
  22.  
  23. void relax(Edges e, vector <int>& result, vector <int>& previous) {
  24.     if (result[e.firstV] == 30000)
  25.         return;
  26.     if (result[e.secondV] > result[e.firstV] + e.weight) {
  27.         result[e.secondV] = result[e.firstV] + e.weight;
  28.         previous[e.secondV] = e.firstV;
  29.     }
  30. }
  31.  
  32. void FordBellman(vector <Edges>& graph, int s, vector <int>& result, int vertex) {
  33.     vector <int> previous(vertex);
  34.     initialize(s, vertex, result, previous);
  35.     for (int i = 0; i < vertex - 1; ++i)
  36.         for (int e = 0; e < graph.size(); ++e)
  37.             relax(graph[e], result, previous);
  38. }
  39.  
  40. int main() {
  41.     int n, m;
  42.     cin >> n >> m;
  43.     vector <Edges> graph(m);
  44.     vector <int> result(n);
  45.     for (int i = 0; i < m; ++i) {
  46.         int f, s, w;
  47.         cin >> f >> s >> w;
  48.         graph[i] = Edges(f - 1, s - 1, w);
  49.     }
  50.     FordBellman(graph, 0, result, n);
  51.     for (int i = 0; i < n; ++i)
  52.         cout << result[i] << " ";
  53.     //system("pause");
  54.     return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement