水!
#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef pair<int, int> PII;
const int N = 21;
bool st[N][N];
int dist[N][N];
int dx[12] = {-2, -1, 1, 2, 2, 1, -1, -2, -2, 2, 2, -2};
int dy[12] = {1, 2, 2, 1, -1, -2, -2, -1, 2, 2, -2, -2};
void bfs(int sx, int sy)
{
memset(st, 0, sizeof st);
memset(dist, -1, sizeof dist);
dist[sx][sy] = 0;
st[sx][sy] = true;
queue<PII> q;
q.push({sx, sy});
while(q.size())
{
auto t = q.front();
q.pop();
if(t.x == 1 && t.y == 1)
{
cout << dist[1][1] << endl;
break;
}
for (int i = 0; i < 12; i ++ )
{
int a = t.x + dx[i], b = t.y + dy[i];
if(a < 1 || b < 1 || st[a][b] || a > 20 || b > 20) continue;
st[a][b] = true;
dist[a][b] = dist[t.x][t.y] + 1;
q.push({a, b});
}
}
}
int main()
{
int x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2;
bfs(x1, y1);
bfs(x2, y2);
return 0;
}