Nik_Perepelov

4 контест 2 задача

Oct 5th, 2021
815
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.85 KB | None | 0 0
  1. #include <iostream>
  2. #include<vector>
  3. #include<algorithm>
  4. #include <iomanip>
  5.  
  6. using namespace std;
  7.  
  8. vector<vector<pair<int, int>>> G;
  9. vector<int> used;
  10. vector<int> dist;
  11. vector<int> parents;
  12. int n;
  13.  
  14. void dkstr(int v) {
  15.     dist[v] = 0;
  16.     for (int i = 0; i < n; i++) {
  17.         //поиск минимума
  18.         int min_v = -1;
  19.         int min_dist = 1000000000;
  20.         for (int i = 0; i < n; i++) {
  21.             if (used[i] == 0 && dist[i] < min_dist) {
  22.                 min_v = i;
  23.                 min_dist = dist[i];
  24.             }
  25.         }
  26.         if (min_v == -1) {
  27.             return;
  28.         }
  29.         //релаксация
  30.         used[min_v] = 1;
  31.         for (int i = 0; i < G[min_v].size(); i++) {
  32.             int actual_v = G[min_v][i].first;
  33.             int weight = G[min_v][i].second;
  34.             if (used[actual_v] == 0 && dist[actual_v] > min_dist + weight) {
  35.                 dist[actual_v] = min_dist + weight;
  36.                 parents[actual_v] = min_v;
  37.             }
  38.         }
  39.     }
  40. }
  41.  
  42. int main() {
  43.     int s, f;
  44.     cin >> n >> s >> f;
  45.     s -= 1;
  46.     f -= 1;
  47.  
  48.     G = vector<vector<pair<int, int>>>(n);
  49.     used = vector<int>(n);
  50.     dist = vector<int>(n, 1000000000);
  51.     parents = vector<int>(n, -1);
  52.  
  53.     //ввод данных
  54.     for (int i = 0; i < n; i++) {
  55.         for (int j = 0; j < n; j++) {
  56.             int a;
  57.             cin >> a;
  58.             if (a != 0 && a != -1) {
  59.                 G[i].push_back(make_pair(j, a));
  60.             }
  61.         }
  62.     }
  63.  
  64.     dkstr(s);
  65.     if (used[f] == 0) {
  66.         cout << -1;
  67.     } else {
  68.         // f - > s
  69.         vector<int> ans;
  70.         while (f != -1){
  71.             ans.push_back(f);
  72.             f = parents[f];
  73.         }
  74.  
  75.         for (int i = ans.size() - 1; i >= 0; i--){
  76.             cout << ans[i] + 1 << ' ';
  77.         }
  78.     }
  79.     return 0;
  80. }
  81.  
Advertisement
Add Comment
Please, Sign In to add comment