Advertisement
LuftAffe

dijkstra

Sep 2nd, 2014
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.98 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <vector>
  3. #include <utility>
  4.  
  5. using namespace std;
  6.  
  7. const int INF = 10000000;
  8.  
  9. int main(){
  10.    int n, s, f;
  11.    scanf("%d%d%d", &n, &s, &f);
  12.    int tp;
  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.            scanf("%d", &tp);
  17.            if(tp != -1 && i != j){
  18.                g[i].push_back(make_pair(j, tp));
  19.            }
  20.        }
  21.    vector<int> dist(n, INF);
  22.    dist[s-1] = 0;
  23.    vector<char> used(n, 0);
  24.    for(int i = 0; i < n; ++i){
  25.        int v = -1;
  26.        for(int j = 0; j < n; ++j){
  27.            if(!used[j] && (v == -1 || dist[j] < dist[v]))
  28.                v = j;
  29.        }
  30.        used[v] = true;
  31.        for(int j = 0; j < g[v].size(); ++j){
  32.            int to = g[v][j].first;
  33.            int len = g[v][j].second;
  34.            if(!used[to] && dist[v] + len < dist[to])
  35.                dist[to] = dist[v] + len;
  36.        }
  37.    }
  38.    printf("%d\n", dist[f-1]);
  39.    return 0;
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement