Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- int matrix[100][100];
- int a, b, i, j, start, n;
- int answ[100];
- int work[100];
- int main()
- {
- cin>>n>>start;
- for(i = 0; i < n; i++) answ[i]=2147483647;
- for(i = 0; i < n; i++){
- for(j = 0; j < n; j++) cin>>matrix[i][j];
- }
- answ[start]=0;
- for(i=0; i<n; i++) // тут начинаем отмечаем от стартовой вершины
- if(matrix[start][i])
- answ[i]=matrix[start][i];
- while(true){ // это сама дейкстра
- int minpos = n; // это вершина, с которой я буду работать
- for(i=0; i<n; i++) // ищем эту вершину
- if(work[i] && answ[i] < answ[minpos])
- minpos = i;
- if(minpos == n) // если она не найдена
- break;
- work[minpos] = 1; // отмечаем, что побыли
- for(j=0; j<n; j++) // отмечаем относительно новой вершины
- if(matrix[minpos][i])
- answ[i] = min(answ[i], matrix[minpos][i] + answ[minpos]); // обновляем значения, если можем меньше
- }
- for(j=0; j<n; j++){
- cout<<answ[j]<<" ";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement