Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int M[1005][1005];
- queue <pair <int, int> > q;
- int Ox[] = {-1, 1, 0, 0};
- int Oy[] = {0, 0, -1, 1};
- bool OK (int i, int j, int n, int m) {return i <= n && j <= m && i >= 1 && j >= 1 && M[i][j] == 0;}
- void labirint (int n, int m)
- {
- pair <int, int> p;
- while (!q.empty()) {
- for (int i = 0; i < 4; i ++) {
- p = pair <int, int> (q.front().first + Ox[i], q.front().second + Oy[i]);
- if (OK (p.first, p.second, n, m)) q.push(p), M[p.first][p.second] = 1 + M[q.front().first][q.front().second];
- }
- q.pop();
- }
- }
- int main()
- {
- int n, m;
- cin >> n >> m;
- for (int i = 1; i <= n; i ++) {
- for (int j = 1; j <= m; j ++) {
- cin >> M[i][j];
- if (M[i][j] == 1) M[i][j] = -1;
- }
- }
- pair <int, int> start, finish;
- cin >> start.first >> start.second >> finish.first >> finish.second;
- q.push(start), M[start.first][start.second] = 1;
- labirint(n, m);
- cout << M[finish.first][finish.second];
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement