Advertisement
Guest User

Untitled

a guest
Nov 19th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.08 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int M[1005][1005];
  6. queue <pair <int, int> > q;
  7. int Ox[] = {-1, 1, 0, 0};
  8. int Oy[] = {0, 0, -1, 1};
  9.  
  10. bool OK (int i, int j, int n, int m) {return i <= n && j <= m && i >= 1 && j >= 1 && M[i][j] == 0;}
  11.  
  12. void labirint (int n, int m)
  13. {
  14.     pair <int, int> p;
  15.     while (!q.empty()) {
  16.         for (int i = 0; i < 4; i ++) {
  17.             p = pair <int, int> (q.front().first + Ox[i], q.front().second + Oy[i]);
  18.             if (OK (p.first, p.second, n, m)) q.push(p), M[p.first][p.second] = 1 + M[q.front().first][q.front().second];
  19.         }
  20.         q.pop();
  21.     }
  22. }
  23.  
  24. int main()
  25. {
  26.     int n, m;
  27.     cin >> n >> m;
  28.     for (int i = 1; i <= n; i ++) {
  29.         for (int j = 1; j <= m; j ++) {
  30.             cin >> M[i][j];
  31.             if (M[i][j] == 1) M[i][j] = -1;
  32.         }
  33.     }
  34.     pair <int, int> start, finish;
  35.     cin >> start.first >> start.second >> finish.first >> finish.second;
  36.     q.push(start), M[start.first][start.second] = 1;
  37.     labirint(n, m);
  38.     cout << M[finish.first][finish.second];
  39.     return 0;
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement