Advertisement
Guest User

Untitled

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