Advertisement
Guest User

Untitled

a guest
Oct 16th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.62 KB | None | 0 0
  1. #include <iostream>
  2. #include <queue>
  3. #include <vector>
  4.  
  5. #define c_boost std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr)
  6.  
  7. using namespace std;
  8. using graph=vector <vector <int>>;
  9.  
  10. vector <bool> used;
  11. vector <int> dist;
  12. vector <int> reverseEdges;
  13.  
  14. graph g;
  15. graph gT;
  16.  
  17. bool isAnswerReady(int current, int end) {
  18.     if (current == end) {
  19.         cout << reverseEdges[end];
  20.         return true;
  21.     }
  22.     return false;
  23. }
  24.  
  25. void BFS(int start, int end) {
  26.     queue <int> q;
  27.     q.push(start);
  28.     while (!q.empty()) {
  29.         int from = q.front();
  30.         q.pop();
  31.         used[from] = true;
  32.         for (int to: g[from]) {
  33.             reverseEdges[to] = min(reverseEdges[to], reverseEdges[from]);
  34.             if (!used[to]) {
  35.                 if (isAnswerReady(to, end))
  36.                     return;
  37.                 q.push(to);
  38.             }
  39.         }
  40.         for (int backTo : gT[from]) {
  41.             reverseEdges[backTo] = min(reverseEdges[backTo], reverseEdges[from] + 1);
  42.             if (!used[backTo]) {
  43.                 if (isAnswerReady(backTo, end))
  44.                     return;
  45.                 q.push(backTo);
  46.             }
  47.         }
  48.     }
  49. }
  50.  
  51. int main() {
  52.     int n, m, start, end;
  53.     cout << "Введите {n}, {m}, {start}, {end}\n";
  54.     cin >> n >> m >> start >> end;
  55.     used.assign(n, false);
  56.     reverseEdges.assign(n, 0);
  57.     g = graph(n);
  58.     gT = graph(n);
  59.     for (int i = 0; i < m; ++i) {
  60.         int from, to;
  61.         cin >> from >> to;
  62.         --from;
  63.         --to;
  64.         g[from].push_back(to);
  65.         gT[to].push_back(from);
  66.     }
  67.     BFS(start - 1, end - 1);
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement