思路是从(1,1)跑反图
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,x1,y1,x2,y2;
int dis[50][50];
int dx[20]={1,-1,-1,1,2,-2,-2,2,2,-2,2,-2};
int dy[20]={2,-2,2,-2,1,-1,1,-1,2,-2,-2,2};
struct node{
int x,y,dis;
};
int bfs(int sx,int sy){
memset(dis,-1,sizeof dis);
queue<node> q;
dis[sx][sy] = 0;
q.push({sx,sy});
while(q.size()){
int x = q.front().x;
int y = q.front().y;
q.pop();
for(int i = 0; i < 12; i++){
int nx = x + dx[i];
int ny = y + dy[i];
if(nx < 1 || ny < 1 || nx > 40 || ny > 40)continue;
if(dis[nx][ny]!=-1)continue;
dis[nx][ny] = dis[x][y] + 1;
q.push({nx,ny});
}
}
}
int main() {
cin >> x1 >> y1 >> x2 >> y2;
bfs(1,1);
cout << dis[x1][y1] << endl << dis[x2][y2];
return 0;
}