Advertisement
IlidanBabyRage

dijkstra2.cpp

May 30th, 2015
284
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.98 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. const int MAX_INT = (~(1 << (sizeof(int) * 8 - 1)));
  7.  
  8. int main(){
  9.    
  10.     int n, s, f;
  11.     cin >> n >> s >> f;
  12.     s--; f--;
  13.  
  14.     int cost[100 * 100], d[100];
  15.     bool visited[100] = {};
  16.     for (int i = 0; i < n * n; i++)
  17.         cin >> cost[i];
  18.  
  19.     for (int i = 0; i < 100; i++)
  20.         d[i] = MAX_INT;
  21.     d[s] = 0;
  22.    
  23.     int tmp, tmpi, tmpd, swap;
  24.     vector<int> v;
  25.     v.push_back(s);
  26.  
  27.     while (!v.empty()){
  28.         tmp = v.back();
  29.         v.pop_back();
  30.         if (visited[tmp])
  31.             continue;
  32.         visited[tmp] = true;
  33.         for (int i = 0; i < n; i++){
  34.             tmpi = tmp * n + i;
  35.             if (!visited[i] && cost[tmpi] > -1){
  36.                 tmpd = d[tmp] + cost[tmpi];
  37.                 if (tmpd < d[i]){
  38.                     d[i] = tmpd;
  39.                     v.push_back(i);
  40.                     int j = v.size() - 1;
  41.                     while(j > 0 && d[i] > d[v[j - 1]]){
  42.                         swap = v[j];
  43.                         v[j] = v[j - 1];
  44.                         v[--j] = swap;
  45.                     }
  46.                 }
  47.             }
  48.         }
  49.     }  
  50.  
  51.     if (d[f] == MAX_INT)
  52.         cout << -1 << endl;
  53.     else
  54.         cout << d[f] << endl;
  55.  
  56.     return 0;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement