Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <bits/stdc++.h>
- using namespace std;
- vector <vector <pair<int,int> > > g;
- int n, m, x, y, z, s, f;
- int r[1000][1000];
- const int INF = 1e7;
- int main()
- {
- cin >> n >> s >> f;
- g.resize(n);
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- cin >> r[i][j];
- if (r[i][j] > -1 && i != j)
- g[i].push_back(make_pair(j, r[i][j]));
- }
- // cin >> x >> y >> z;
- }
- /* for (int i = 0; i < n; i++) {
- for (int j = 0; j < g[i].size(); j++)
- cout << i << " " << g[i][j].first << " " << g[i][j].second << endl;
- // cout << endl;
- } */
- //cin >> s;
- s--;
- f--;
- vector <int> d(n, INF);
- vector <int> p(n);
- vector <bool> u(n, false);
- d[s] = 0;
- u[s] = true;
- p[s] = -1;
- 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;
- int len = g[v][j].second;
- // d[to] = min(d[to], d[v] + len);
- if (d[v] + len < d[to]) {
- d[to] = d[v] + len;
- p[to] = v;
- }
- }
- }
- int MAX = -1;
- // int t = 0;
- /* for (int i = 0; i < n; i++) {
- if (d[n] > MAX) {
- MAX = d[n];
- t = i;
- }
- } */
- if (d[f] == INF) {
- cout << -1;
- return 0;
- }
- else {
- // cout << d[f] << endl;
- vector<int> ans;
- ans.push_back(f);
- for (int i = f; p[i] != -1; i = p[i]) {
- ans.push_back(p[i]);
- }
- reverse(ans.begin(), ans.end());
- for (int i = 0; i < ans.size(); i++)
- cout << i + 1 << " ";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement