#include<iostream>
#include<cstdio>
#include<iomanip>
using namespace std;
int map[400][400];
int que1[100000];
int que2[100000];
int num[400][400];
int answer[1000];
int dx[8]={-1,-1,1,1,-2,-2,2,2};
int dy[8]={2,-2,-2,2,-1,1,-1,1};
int main()
{
int m,n,j,i,k,x1,x2,y1,y2,x,y,flag;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
memset(map,0,sizeof(map));
memset(num,0,sizeof(num));
flag=0;
scanf("%d",&m);
scanf("%d%d",&x1,&y1);
scanf("%d%d",&x2,&y2);
if(x1==x2&&y1==y2)
{
answer[i]=0;
flag=1;
}
que1[1]=x1;
que2[1]=y1;
num[x1][y1]=0;
map[x1][y1]=1;
int head=0,tail=1;
while(head<tail)
{
head++;
for(j=0;j<=7;j++)
{
x=que1[head]+dx[j];
y=que2[head]+dy[j];
if(x>=0&&x<=m&&y>=0&y<=m&&map[x][y]==0&&num[x][y]==0)
{
tail++;
que1[tail]=x;
que2[tail]=y;
num[x][y]=num[que1[head]][que2[head]]+1;
if(x==x2&&y==y2&&flag==0)
{
flag=1;
answer[i]=num[x2][y2];
break;
}
map[x][y]=1;
}
}
if(flag==1)break;
}
}
for(i=1;i<=n;i++)
cout<<answer[i]<<endl;
return 0;
}
1257:Knight Moves
最新推荐文章于 2024-04-12 08:16:07 发布