Advertisement
Guest User

Untitled

a guest
Feb 28th, 2020
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.28 KB | None | 0 0
  1. #include<iostream>
  2. #include<vector>
  3. #include<algorithm>
  4.  
  5. using namespace std;
  6.  
  7. const int INF = 1000000000;
  8.  
  9. int main(){
  10.     int n, s, f;
  11.     cin >> n >> s >> f;
  12.     --s; --f;
  13.     vector< vector< pair<int, int> > > g(n);
  14.     for(int i = 0; i < n; ++i){
  15.         for(int j = 0; j < n; ++j){
  16.             int k;
  17.             cin >> k;
  18.             if(k != -1 && i != j)
  19.                 g[i].push_back(make_pair(j, k));
  20.         }
  21.     }
  22.     vector<int> d(n, INF), p(n);
  23.     d[s] = 0;
  24.     vector<bool> u(n, false);
  25.     for(int i = 0; i < n; ++i){
  26.         int v = -1;
  27.         for(int j = 0; j < n; ++j){
  28.             if(!u[j] && (v == -1 || d[j] < d[v]))
  29.                 v = j;
  30.         }
  31.         if(d[v] == INF)
  32.             break;
  33.         u[v] = true;
  34.         for(int j = 0; j < g[v].size(); ++j){
  35.             int to = g[v][j].first;
  36.             if (d[v] + g[v][j].second < d[to]) {
  37.                 d[to] = d[v] + g[v][j].second;
  38.                 p[to] = v;
  39.             }
  40.         }
  41.     }
  42.     if(d[f] == INF){
  43.         cout << -1;
  44.         return 0;
  45.     }
  46.     vector<int> path;
  47.     for(int i = f; i != s; i = p[i]){
  48.         path.push_back(i);
  49.     }
  50.     path.push_back(s);
  51.     reverse(path.begin(), path.end());
  52.     for(int i = 0; i < path.size(); ++i){
  53.         cout << path[i] + 1 << " ";
  54.     }
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement