Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <vector>
- #include <utility>
- using namespace std;
- const int INF = 10000000;
- int main(){
- int n, s, f;
- scanf("%d%d%d", &n, &s, &f);
- int tp;
- vector<vector<pair<int, int> > > g(n);
- for(int i = 0; i < n; ++i)
- for(int j = 0; j < n; ++j){
- scanf("%d", &tp);
- if(tp != -1 && i != j){
- g[i].push_back(make_pair(j, tp));
- }
- }
- vector<int> dist(n, INF);
- dist[s-1] = 0;
- vector<char> used(n, 0);
- for(int i = 0; i < n; ++i){
- int v = -1;
- for(int j = 0; j < n; ++j){
- if(!used[j] && (v == -1 || dist[j] < dist[v]))
- v = j;
- }
- used[v] = true;
- for(int j = 0; j < g[v].size(); ++j){
- int to = g[v][j].first;
- int len = g[v][j].second;
- if(!used[to] && dist[v] + len < dist[to])
- dist[to] = dist[v] + len;
- }
- }
- printf("%d\n", dist[f-1]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement