Advertisement
Guest User

Untitled

a guest
Jan 24th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.57 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. int matrix[100][100];
  5. int a, b, i, j, start, n;
  6. unsigned int answ[100];
  7. int work[100];
  8. int main()
  9. {
  10.     cin>>n>>start;
  11.     for(i = 0; i < n; i++) answ[i] = -1;
  12.     for(i = 0; i < n; i++){
  13.             for(j = 0; j < n; j++) cin>>matrix[i][j];
  14.     }
  15.     answ[start]=0;
  16.     for(i=0; i<n; i++) // тут начинаем отмечаем от стартовой вершины
  17.         if(matrix[start][i])
  18.             answ[i]=matrix[start][i];
  19.     while(true){ // это сама дейкстра
  20.         int minpos = n; // это вершина, с которой я буду работать
  21.         for(i=0; i<n; i++)     // ищем эту вершину
  22.             if(work[i] && answ[i] < answ[minpos])
  23.                 minpos = i;
  24.         if(minpos == n) // если она не найдена
  25.             break;
  26.         work[minpos] = 1; // отмечаем, что побыли
  27.         for(j=0; j<n; j++) // отмечаем относительно новой вершины
  28.             if(matrix[minpos][i])
  29.                 answ[i] = min(answ[i], matrix[minpos][i] + answ[minpos]); // обновляем значения, если можем меньше
  30.     }
  31.     for(j=0; j<n; j++){
  32.         cout<<answ[j]<<" ";
  33.     }
  34.     return 0;
  35. }#include <iostream>
  36.  
  37. using namespace std;
  38. int matrix[100][100];
  39. int a, b, i, j, start, n;
  40. unsigned int answ[100];
  41. int work[100];
  42. int main()
  43. {
  44.     cin>>n>>start;
  45.     for(i = 0; i < n; i++) answ[i] = -1;
  46.     for(i = 0; i < n; i++){
  47.             for(j = 0; j < n; j++) cin>>matrix[i][j];
  48.     }
  49.     answ[start]=0;
  50.     for(i=0; i<n; i++) // тут начинаем отмечаем от стартовой вершины
  51.         if(matrix[start][i])
  52.             answ[i]=matrix[start][i];
  53.     while(true){ // это сама дейкстра
  54.         int minpos = n; // это вершина, с которой я буду работать
  55.         for(i=0; i<n; i++)     // ищем эту вершину
  56.             if(work[i] && answ[i] < answ[minpos])
  57.                 minpos = i;
  58.         if(minpos == n) // если она не найдена
  59.             break;
  60.         work[minpos] = 1; // отмечаем, что побыли
  61.         for(j=0; j<n; j++) // отмечаем относительно новой вершины
  62.             if(matrix[minpos][i])
  63.                 answ[i] = min(answ[i], matrix[minpos][i] + answ[minpos]); // обновляем значения, если можем меньше
  64.     }
  65.     for(j=0; j<n; j++){
  66.         cout<<answ[j]<<" ";
  67.     }
  68.     return 0;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement