Advertisement
AlexGo11

Untitled

Jan 2nd, 2020
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.29 KB | None | 0 0
  1. //BFS и алгоритм Дейкстры. Теория. Задача C.
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. int n, m, start, finish;
  5. vector < vector < int > > g;
  6. vector < int > dist;
  7. vector < int > from;
  8.  
  9. void Dijkstra() {
  10.     dist.resize(n, 1e9 + 7);
  11.     from.resize(n);
  12.     from[start] = -1;
  13.     dist[start] = 0;
  14.     set < pair < int , int > > s;
  15.     s.insert({0, start});
  16.     while (!s.empty()) {
  17.         auto c = *s.begin();
  18.         s.erase(s.begin());
  19.         int v = c.second;
  20.         int u = 0;
  21.         for (auto e : g[v]) {
  22.             int d = e;
  23.             if (e != -1 && u != v && dist[u] > dist[v] + d) {
  24.                 s.erase({dist[u], u});
  25.                 dist[u] = dist[v] + d;
  26.                 from[u] = v;
  27.                 s.insert({dist[u], u});
  28.             }
  29.             u++;
  30.         }
  31.     }
  32. }
  33.  
  34. void print_way() {
  35.     if (dist[finish] == 1e9 + 7) {
  36.         cout << -1;
  37.         return;
  38.     }
  39.     cout << dist[finish] << endl;
  40.     /*
  41.     vector < int > vs;
  42.     int v = finish;
  43.     while (from[v] != -1) {
  44.         vs.push_back(v);
  45.         v = from[v];
  46.     }
  47.     vs.push_back(start);
  48.     reverse(vs.begin(), vs.end());
  49.     cout << vs.size() << endl;
  50.     for (auto u : vs) cout << u + 1 << " " ;*/
  51. }
  52.  
  53. int main() {
  54.     cin >> n;
  55.     cin >> start >> finish;
  56.     start--; finish--;
  57.    
  58.     g.resize(n, vector < int > (n));
  59.     for (int i = 0; i < n; i++) {
  60.         for (int j = 0; j < n; j++) {
  61.             cin >> g[i][j];
  62.         }
  63.     }
  64.     Dijkstra();
  65.     print_way();
  66.     return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement