Advertisement
hurmawe

7 задача

Dec 26th, 2020
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.83 KB | None | 0 0
  1. //формат ввода количество вершин, длины путей(отсутствие грани равняется 10000009), далее массив разрешенных граней(0 не разрешены, 1 //разрешены
  2. //3
  3. //10000009 7 3
  4. //7 10000009 10
  5. //2 215 10000009
  6. //0 1 1
  7. //10
  8.  
  9.  
  10. #include <iostream>
  11. #include <vector>
  12.  
  13.  
  14. using namespace std;
  15.  
  16. void Floyd(vector<vector<int>>& w, vector<vector<int>>& h,const vector<int>& no) {
  17.     for (int k = 0; k < w.size(); k++) {
  18.         if(no[k] == 0) continue;
  19.         for (int i = 0; i < w.size(); i++) {
  20.             if(no[i] == 0) continue;
  21.             for (int j = 0; j < w.size(); j++) {
  22.                 if(no[j] == 0) continue;
  23.                 if (w[i][k] + w[k][j] < w[i][j]) {
  24.                     w[i][j] = w[i][k] + w[k][j];
  25.                     h[i][j] = h[k][j];
  26.                 }
  27.             }
  28.         }
  29.     }
  30. }
  31.  
  32. int main(){
  33.     int         lenght;
  34.     int         min = 10000009;
  35.     cin >> lenght;
  36.  
  37.  
  38.  
  39.  
  40.     vector<vector<int>> w(lenght);
  41.     for(int i =0;i <lenght; i++)
  42.     {
  43.         w[i].resize(lenght);
  44.         for(int j =0; j< lenght; j++) {
  45.                cin >> w[i][j];
  46.         }
  47.     }
  48.  
  49.     vector<int> no(lenght);
  50.     for(int i=0;i <lenght;i++)
  51.     {
  52.         cin >>no[i];
  53.     }
  54.  
  55.     vector<vector<int>> h(lenght);
  56.     for(int i =0;i <lenght; i++)
  57.     {
  58.         h[i].resize(lenght);
  59.         for(int j=0;j<lenght;j++)
  60.         {
  61.             h[i][j]=i;
  62.             h[i][i]=-1;
  63.         }
  64.     }
  65.     Floyd(w,h, no);
  66.  
  67.     for(int i=0;i<lenght;i++) {
  68.         if(no[i] == 0) continue;
  69.         for (int j = 0; j < lenght; j++) {
  70.             if(no[j] == 0) continue;
  71.             if(i==j) continue;
  72.             if (w[i][j] < min) {
  73.                 min = w[i][j];
  74.             }
  75.         }
  76.     }
  77.     cout << min;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement