Advertisement
Okorosso

Ford-Bellman

May 26th, 2021
975
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.40 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINS
  2. #include <fstream>
  3. #include <vector>
  4. #include <string>
  5. #include <set>
  6. #include <algorithm>
  7. #include <map>
  8. #include <queue>
  9.  
  10. using namespace std;
  11.  
  12. //bool dfs(int v, int prev){
  13. //  used[v] = 1;
  14. //  for (int i = 0; i < mat[v].size(); i++)
  15. //  {
  16. //
  17. //      if (used[mat[v][i]] == 0){
  18. //          dfs(mat[v][i], v);
  19. //          used[v] = 2;
  20. //      }
  21. //  }
  22. //  used[v] = 2;
  23. //  return true;
  24. //}
  25. //
  26. //bool cheker(vector<int> ch, int f){
  27. //  for (int i = f; i < ch.size(); i++){
  28. //      if (ch[i] != 2){
  29. //          return false;
  30. //      }
  31. //
  32. //  }return true;
  33. //}
  34.  
  35. struct edges{
  36.     int x, y, value;
  37. };
  38.  
  39.  
  40. int main(){
  41.  
  42.  
  43.  
  44.     ifstream fin("input.txt");
  45.     ofstream fout("output.txt");
  46.  
  47.  
  48.     int n, m, s;
  49.  
  50.     fin >> n >> m >> s;
  51.     s--;
  52.     vector<edges> edge(m);
  53.     vector <int> d(n, INT_MAX);
  54.  
  55.  
  56.     for (int i = 0; i < m; i++){
  57.         int a, b, c;
  58.         fin >> a >> b >> c;
  59.         a--;
  60.         b--;
  61.         edge[i].x = a;
  62.         edge[i].y = b;
  63.         edge[i].value = c;
  64.     }
  65.     d[s] = 0;
  66.     bool change = true;
  67.     while (change){
  68.         change = false;
  69.         for (int i = 0; i < m; i++) {
  70.             if (d[edge[i].x] < INT_MAX) {//d[0]
  71.                 if ((d[edge[i].y] > (d[edge[i].x] + edge[i].value))){
  72.                     d[edge[i].y] = (d[edge[i].x] + edge[i].value);
  73.                     change = true;
  74.                 }
  75.             }
  76.         }
  77.     }
  78.  
  79.     for (int i = 0; i < n; i++){
  80.         if (d[i] != INT_MAX && i != n - 1){
  81.             fout << d[i] << ' ';
  82.         }
  83.         else if (i == n - 1 && d[i] != INT_MAX){
  84.             fout << d[i];
  85.         }
  86.     }
  87.  
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement