Advertisement
Guest User

Untitled

a guest
Dec 13th, 2019
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.06 KB | None | 0 0
  1. #include <iomanip>
  2. #include <vector>
  3. #include<iostream>
  4.    using namespace std;
  5.  
  6.    void FloydWarshall(vector<vector<int>>&)//объявление функции
  7.  
  8.    int main() {
  9.     vector<vector<int>> G {
  10.     {0, 4, 0, 2, 2, 0, 0, 0, 0},
  11.     {0, 0, 7, 0, 0, 3, 0, 0, 0},
  12.     {0, 0, 0, 0, 0, 2, 0, 0, 0},
  13.     {0, 0, 0, 0, 0, 0, 1, 1, 0},
  14.     {0, 2, 0, 3, 0, 2, 0, 6, 1},
  15.     {0, 0, 0, 0, 0, 0, 0, 0, 2},
  16.     {0, 0, 0, 0, 0, 0, 0, 5, 0},
  17.     {0, 0, 0, 0, 0, 0, 0, 0, 5},
  18.     {0, 0, 0, 0, 0, 0, 0, 0, 0}
  19.     }; // заданный граф
  20.  
  21.     FloydWarshall(G);// вызов функции
  22.     for (auto &i: G) {// вывод нужной матрицы
  23.     for (auto &j: i)
  24.     cout << j << setw(3);
  25.     cout << "\n";
  26.     }
  27.     return 0;
  28.    }
  29.  
  30.    void FloydWarshall(vector<vector<int>> &myG){//описание функции
  31.  
  32.     int inf = 1000000000; //Необходимо для того, чтобы нулевые элементы недиагональные элементы сменили своё значение
  33.     size_t k, i, j, w = myG.size();// не понял:(
  34.     vector<vector<int>> minP = myG;// создаем еще один массив MiP и присваиваем ему MyG
  35.  
  36.     for (i = 0; i < w; i++)//Проход по матрице
  37.     for (j = 0; j < w; j++)
  38.     if (minP[i][j] == 0 && i != j)//условия недиагональныз нулей
  39.     minP[i][j] = inf;// ставим вместо ноликов инфинити(не на диагонали )
  40.     for (k = 0; k < w; k++)// В 3 следуших строчках мы прокручиваем цикл чтобы понять, какой вариант нам подходит(i->j или i->k->g)
  41.     for (i = 0; i < w; i++)
  42.     for (j = 0; j < w; j++)
  43.     if (minP[i][k] + minP[k][j] < minP[i][j])//Условие позволяющее выбрать нужный путь(i->j или i->k->g)
  44.     myG[i][j] = minP[i][k] + minP[k][j];// изменяет в МуG нужные ребра, информацию о которых мы узнали в MinP
  45.    }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement