#include<bits/stdc++.h>
using namespace std;
int st_x1,st_y1,st_x2,st_y2,x,y,b[100][100],bs[100][100],bb[100][100],bss[100][100];
queue<int>xx;
queue<int>yy;
queue<int>xxx;
queue<int>yyy;
int main(){
cin>>st_x1>>st_y1>>st_x2>>st_y2;
xx.push(st_x1),yy.push(st_y1);
b[st_x1][st_y1]=1;
while(1){
x=xx.front(),y=yy.front();
if(x-2>0&&y-2>0&&b[x-2][y-2]==0)xx.push(x-2),yy.push(y-2),b[x-2][y-2]=1,bs[x-2][y-2]=bs[x][y]+1;
if(x-2>0&&b[x-2][y+2]==0)xx.push(x-2),yy.push(y+2),b[x-2][y+2]=1,bs[x-2][y+2]=bs[x][y]+1;
if(y-2>0&&b[x+2][y-2]==0)xx.push(x+2),yy.push(y-2),b[x+2][y-2]=1,bs[x+2][y-2]=bs[x][y]+1;
if(b[x+2][y+2]==0)xx.push(x+2),yy.push(y+2),b[x+2][y+2]=1,bs[x+2][y+2]=bs[x][y]+1;
if(x-2>0&&y-1>0&&b[x-2][y-1]==0)xx.push(x-2),yy.push(y-1),b[x-2][y-1]=1,bs[x-2][y-1]=bs[x][y]+1;
if(x-2>0&&b[x-2][y+1]==0)xx.push(x-2),yy.push(y+1),b[x-2][y+1]=1,bs[x-2][y+1]=bs[x][y]+1;
if(x-1>0&&y-2>0&&b[x-1][y-2]==0)xx.push(x-1),yy.push(y-2),b[x-1][y-2]=1,bs[x-1][y-2]=bs[x][y]+1;
if(y-2>0&&b[x+1][y-2]==0)xx.push(x+1),yy.push(y-2),b[x+1][y-2]=1,bs[x+1][y-2]=bs[x][y]+1;
if(x-1>0&&b[x-1][y+2]==0)xx.push(x-1),yy.push(y+2),b[x-1][y+2]=1,bs[x-1][y+2]=bs[x][y]+1;
if(b[x+2][y+1]==0)xx.push(x+2),yy.push(y+1),b[x+2][y+1]=1,bs[x+2][y+1]=bs[x][y]+1;
xx.pop(),yy.pop();
if(x==1&&y==1)break;
}
cout<<bs[1][1]<<endl;
xxx.push(st_x2),yyy.push(st_y2);
bb[st_x2][st_y2]=1;
while(1){
x=xxx.front(),y=yyy.front();
if(x-2>0&&y-2>0&&bb[x-2][y-2]==0)xxx.push(x-2),yyy.push(y-2),bb[x-2][y-2]=1,bss[x-2][y-2]=bss[x][y]+1;
if(x-2>0&&bb[x-2][y+2]==0)xxx.push(x-2),yyy.push(y+2),bb[x-2][y+2]=1,bss[x-2][y+2]=bss[x][y]+1;
if(y-2>0&&bb[x+2][y-2]==0)xxx.push(x+2),yyy.push(y-2),bb[x+2][y-2]=1,bss[x+2][y-2]=bss[x][y]+1;
if(bb[x+2][y+2]==0)xxx.push(x+2),yyy.push(y+2),bb[x+2][y+2]=1,bss[x+2][y+2]=bss[x][y]+1;
if(x-2>0&&y-1>0&&bb[x-2][y-1]==0)xxx.push(x-2),yyy.push(y-1),bb[x-2][y-1]=1,bss[x-2][y-1]=bss[x][y]+1;
if(x-2>0&&bb[x-2][y+1]==0)xxx.push(x-2),yyy.push(y+1),bb[x-2][y+1]=1,bss[x-2][y+1]=bss[x][y]+1;
if(x-1>0&&y-2>0&&bb[x-1][y-2]==0)xxx.push(x-1),yyy.push(y-2),bb[x-1][y-2]=1,bss[x-1][y-2]=bss[x][y]+1;
if(y-2>0&&bb[x+1][y-2]==0)xxx.push(x+1),yyy.push(y-2),bb[x+1][y-2]=1,bss[x+1][y-2]=bss[x][y]+1;
if(x-1>0&&bb[x-1][y+2]==0)xxx.push(x-1),yyy.push(y+2),bb[x-1][y+2]=1,bss[x-1][y+2]=bss[x][y]+1;
if(bb[x+2][y+1]==0)xxx.push(x+2),yyy.push(y+1),bb[x+2][y+1]=1,bss[x+2][y+1]=bss[x][y]+1;
xxx.pop(),yyy.pop();
if(x==1&&y==1)break;
}
cout<<bss[1][1];
return 0;
}
输入:
1 2
2 1
答案:
2
2
输出:
2
3
| 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| 1 | 2(终点) | 0(黑马) | ||
| 2 | ||||
| 3 | 1 | |||
| 4 |
| 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| 1 | 2(终点) | |||
| 2 | 0(白马) | |||
| 3 | ||||
| 4 |