Rt,样例没过,50pts。
#include <bits/stdc++.h>
using namespace std;
const int N = 109;
int dx[] = {1,1,2,2,2,2,-1,-1,-2,-2,-2,-2};
int dy[] = {-2,2,-2,-1,1,2,-2,2,-1,1,-2,2};
int n1,n2,m1,m2;
struct pp {
int x,y,s;
}q[N * N];
int book[N][N];
int head,tail,flag;
void bfs(int x,int y) {
memset(book,0,sizeof(book));
head = tail = 1;
q[tail++] = {1,1,0};
book[1][1] = 1;
while(head < tail) {
pp h = q[head++];
for(int i = 0;i < 12;i++) {
int nx = h.x + dx[i];
int ny = h.y + dy[i];
if(nx < 1 || nx > 20 || ny < 1 || ny > 20) {
continue;
}
if(book[nx][ny]) continue;
if(nx == x && ny == y) {
printf("%d\n",h.s + 1);
return;
}
q[tail++] = {nx,ny,h.s + 1};
book[nx][ny] = 1;
}
}
}
int main() {
scanf("%d %d %d %d",&n1,&m1,&n2,&m2);
bfs(n1,m2);
bfs(n2,m2);
return 0;
}