Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <queue>
- using namespace std;
- struct Position
- {
- int x;
- int y;
- };
- int n, m;
- Position parents[21][21];
- bool used[21][21];
- queue<Position> q;
- bool Check(int x, int y)
- {
- if (x >= 1 && x <= m && y >= 1 && y <= m)
- return true;
- else return false;
- }
- void proc(Position u, int x, int y, int** dist)
- {
- if (Check(x, y) && !used[y][x])
- {
- used[y][x] = true;
- parents[y][x] = u;
- dist[y][x] = dist[u.y][u.x] + 1;
- Position v = { x,y };
- q.push(v);
- }
- }
- void BFS(Position start, int** dist) {
- used[start.y][start.x] = true;
- parents[start.y][start.x] = start;
- dist[start.y][start.x] = 0;
- Position u{ start.x,start.y };
- q.push(u);
- while (!q.empty()) {
- u = q.front();
- q.pop();
- proc(u, u.x - 1, u.y - 2, dist);
- proc(u, u.x - 1, u.y + 2, dist);
- proc(u, u.x - 2, u.y - 1, dist);
- proc(u, u.x - 2, u.y + 1, dist);
- proc(u, u.x + 1, u.y - 2, dist);
- proc(u, u.x + 1, u.y + 2, dist);
- proc(u, u.x + 2, u.y - 1, dist);
- proc(u, u.x + 2, u.y + 1, dist);
- }
- }
- void print_way(Position u)
- {
- if (parents[u.y][u.x].x != u.x || parents[u.y][u.x].y != u.y)
- {
- print_way(parents[u.y][u.x]);
- }
- cout << u.x << ' ' << u.y << endl;
- }
- int main()
- {
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- cin >> n >> m;
- Position start, end;
- int** dist = new int* [21];
- for (int i = 1; i <= 21; i++)
- dist[i] = new int[21];
- cin >> start.x >> start.y;
- cin >> end.x >> end.y;
- BFS(start, dist);
- if (dist[end.y][end.x] > 0)
- {
- cout << dist[end.y][end.x] << endl;
- print_way(end);
- }
- else if (dist[end.y][end.x] == 0)
- cout << 0 << endl << end.x<<" "<<end.y;
- else cout <<-1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement