Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<vector>
- #include<algorithm>
- using namespace std;
- const int INF = 1000000000;
- int main(){
- int n, s, f;
- cin >> n >> s >> f;
- --s; --f;
- vector< vector< pair<int, int> > > g(n);
- for(int i = 0; i < n; ++i){
- for(int j = 0; j < n; ++j){
- int k;
- cin >> k;
- if(k != -1 && i != j)
- g[i].push_back(make_pair(j, k));
- }
- }
- vector<int> d(n, INF), p(n);
- d[s] = 0;
- vector<bool> u(n, false);
- for(int i = 0; i < n; ++i){
- int v = -1;
- for(int j = 0; j < n; ++j){
- if(!u[j] && (v == -1 || d[j] < d[v]))
- v = j;
- }
- if(d[v] == INF)
- break;
- u[v] = true;
- for(int j = 0; j < g[v].size(); ++j){
- int to = g[v][j].first;
- if (d[v] + g[v][j].second < d[to]) {
- d[to] = d[v] + g[v][j].second;
- p[to] = v;
- }
- }
- }
- if(d[f] == INF){
- cout << -1;
- return 0;
- }
- vector<int> path;
- for(int i = f; i != s; i = p[i]){
- path.push_back(i);
- }
- path.push_back(s);
- reverse(path.begin(), path.end());
- for(int i = 0; i < path.size(); ++i){
- cout << path[i] + 1 << " ";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement