Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define ld long double
- #define F first
- #define S second
- #define pb push_back
- #define pii pair <int, int>
- #define all(x) (x).begin(), (x).end()
- #define rall(x) (x).rbegin(), (x).rend()
- #define reunique(x) (x).resize(std::unique(all(x)) - (x).begin())
- #define int long long
- using namespace std;
- int n, x1, y1, x2, y2;
- int dx[] = {2, 2, -2, -2, 1, 1, -1, -1};
- int dy[] = {-1, 1, -1, 1, -2, 2, -2, 2};
- int vis[30][30], d[30][30];
- signed main(){
- memset(d, -1, sizeof d);
- cin >> n;
- cin >> x1 >> y1 >> x2 >> y2;
- queue <pair <int, int>> q;
- q.push({x1, y1});
- vis[x1][y1] = 1;
- d[x1][y1] = 0;
- while (!q.empty()){
- pair <int, int> cur = q.front();
- q.pop();
- for (int i = 0; i < 8; i++){
- if (cur.first + dx[i] >= 1 && cur.first + dx[i] <= n && cur.second + dy[i] >= 1 && cur.second + dy[i] <= n){
- if (!vis[cur.first + dx[i]][cur.second + dy[i]]){
- vis[cur.first + dx[i]][cur.second + dy[i]] = 1;
- d[cur.first + dx[i]][cur.second + dy[i]] = d[cur.first][cur.second] + 1;
- q.push(make_pair(cur.first + dx[i], cur.second + dy[i]));
- }
- }
- }
- }
- cout << d[x2][y2] << '\n';
- int cur = d[x2][y2];
- vector <pair <int, int>> v;
- while (d[x2][y2] != 0){
- v.push_back({x2, y2});
- for (int i = 0; i < 8; i++){
- if (x2 - dx[i] >= 1 && x2 - dx[i] <= n && y2 - dy[i] >= 1 && y2 - dy[i] <= n){
- if (vis[x2 - dx[i]][y2 - dy[i]] && d[x2 - dx[i]][y2 - dy[i]] == cur - 1){
- x2 -= dx[i];
- y2 -= dy[i];
- cur--;
- break;
- }
- }
- }
- }
- v.push_back({x1, y1});
- for (int i = v.size() - 1; i >= 0; i--){
- cout << v[i].first << ' ' << v[i].second << '\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement