Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <queue>
- using namespace std;
- const int inf = 1000;
- struct kletka
- {
- int x, y;
- void new_kletka(int x, int y)
- {
- this->x = x;
- this->y = y;
- }
- };
- class Graph
- {
- public:
- queue<kletka> Q;
- int n, m, dlina = 0, *dx, *dy;
- kletka start, finish, *itog;
- int **arr;
- Graph(int N, int M, int x1, int y1, int x2, int y2)
- {
- n = N;
- m = M;
- start.new_kletka(x1, y1);
- finish.new_kletka(x2, y2);
- arr = new int*[n];
- for (int i = 0; i < n; i++)
- arr[i] = new int[m];
- for(int i = 0; i < n; i++)
- for (int j = 0; j < m; j++)
- arr[i][j] = inf;
- arr[x1][y1] = 0;
- dx = new int[8]{2, 2, 1, 1, -1, -1, -2, -2};
- dy = new int[8]{1, -1, 2, -2, 2, -2, 1, -1};
- }
- void smejnost();
- void all_way();
- void result();
- void negative() { cout << -1;};
- };
- void Graph::smejnost()
- {
- int i, j, u = 0, v = 0;
- kletka a;
- Q.push(start);
- while(!Q.empty())
- {
- i = Q.front().x;
- j = Q.front().y;
- Q.pop();
- for(int k = 0; k < 8; ++k)
- {
- u = i + dx[k];
- v = j + dy[k];
- if(u >= 0 && u < n && v >= 0 && v < m && arr[u][v] > arr[i][j] + 1)
- {
- arr[u][v] = arr[i][j] + 1;
- a.new_kletka(u, v);
- Q.push(a);
- }
- }
- }
- dlina = arr[finish.x][finish.y];
- if(dlina == inf)
- negative();
- else
- all_way();
- }
- void Graph::all_way()
- {
- kletka a;
- int i = 0, j = 0, u = 0, v = 0, shet = 1;
- itog = new kletka[dlina + 1];
- itog[0] = finish;
- Q.push(finish);
- while(shet != dlina)
- {
- i = Q.front().x;
- j = Q.front().y;
- Q.pop();
- for(int k = 0; k < 8; ++k)
- {
- u = i - dx[k];
- v = j - dy[k];
- if(u >= 0 && u < n && v >= 0 && v < m && arr[u][v] == arr[i][j] - 1)
- {
- a.new_kletka(u, v);
- Q.push(a);
- itog[shet] = a;
- shet++;
- break;
- }
- }
- }
- itog[dlina] = start;
- result();
- }
- void Graph::result()
- {
- cout << dlina << endl;
- for (int i = dlina; i >= 0; i--)
- cout << itog[i].x + 1 << " " << itog[i].y +1 << endl;
- }
- int main()
- {
- int n, m, x1, y1, x2, y2;
- cin >> n >> m;
- cin >> x1 >> y1 >> x2 >> y2;
- Graph object(n, m, x1-1, y1-1, x2-1, y2-1);
- object.smejnost();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement