Sanlover

Floyd

Jun 28th, 2021
316
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.02 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. const int maxV = 1000;
  5.  
  6. int GR[maxV][maxV];
  7.  
  8. //алгоритм Флойда-Уоршелла
  9. void FU(int D[][maxV], int V)
  10. {
  11.     for (int i = 0; i < V; i++) D[i][i] = 0;
  12.  
  13.     for (int k = 0; k < V; k++)
  14.         for (int i = 0; i < V; i++)
  15.             for (int j = 0; j < V; j++)
  16.                 if (D[i][k] && D[k][j] && i != j)
  17.                     if (D[i][k] + D[k][j] < D[i][j] || D[i][j] == 0)
  18.                         D[i][j] = D[i][k] + D[k][j];
  19.  
  20.     for (int i = 0; i < V; i++)
  21.     {
  22.         for (int j = 0; j < V; j++)
  23.             cout << D[i][j] << "\t";
  24.         cout << endl;
  25.     }
  26. }
  27. //главная функция
  28. int main()
  29. {
  30.     setlocale(LC_ALL, "Rus");
  31.  
  32.     int n;
  33.     cout << "Количество вершин в графе > ";
  34.     cin >> n;
  35.  
  36.     cout << "Введите матрицу весов ребер:\n";
  37.     for (int i = 0; i < n; i++)
  38.         for (int j = 0; j < n; j++)
  39.         {
  40.             cout << "GR[" << i + 1 << "][" << j + 1 << "] > ";
  41.             cin >> GR[i][j];
  42.         }
  43.     cout << "Матрица кратчайших путей:" << endl;
  44.  
  45.     FU(GR, n);
  46.     return 0;
  47. }
Advertisement
Add Comment
Please, Sign In to add comment