Advertisement
Guest User

Untitled

a guest
Jan 24th, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.28 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. int matrix[100][100];
  4. int a, b, i, j, start, n;
  5. int answ[100];
  6. int work[100];
  7. int main()
  8. {
  9. cin>>n>>start;
  10. for(i = 0; i < n; i++) answ[i]=2147483647;
  11. for(i = 0; i < n; i++){
  12. for(j = 0; j < n; j++) cin>>matrix[i][j];
  13. }
  14. answ[start]=0;
  15. for(i=0; i<n; i++) // тут начинаем отмечаем от стартовой вершины
  16. if(matrix[start][i])
  17. answ[i]=matrix[start][i];
  18. while(true){ // это сама дейкстра
  19. int minpos = n; // это вершина, с которой я буду работать
  20. for(i=0; i<n; i++) // ищем эту вершину
  21. if(work[i] && answ[i] < answ[minpos])
  22. minpos = i;
  23. if(minpos == n) // если она не найдена
  24. break;
  25. work[minpos] = 1; // отмечаем, что побыли
  26. for(j=0; j<n; j++) // отмечаем относительно новой вершины
  27. if(matrix[minpos][i])
  28. answ[i] = min(answ[i], matrix[minpos][i] + answ[minpos]); // обновляем значения, если можем меньше
  29. }
  30. for(j=0; j<n; j++){
  31. cout<<answ[j]<<" ";
  32. }
  33. return 0;
  34. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement