#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
using namespace std;
int A[505][505];
int vstd[505][505];
int main()
{
int T;
scanf("%d",&T);
while (T--)
{
memset(vstd,0,sizeof(vstd));
queue<int> Q;
queue<int> path;
int u;
int m,n;
int x,y;
scanf("%d",&m);
n=m;
int sx,sy,ex,ey;
scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
u=sx*n+sy;
Q.push(u);
path.push(0);
vstd[sx][sy]=1;
while (!Q.empty())
{
x=Q.front()/n;
y=Q.front()%n;
if (ex==x && ey==y)
break;
if (x-1>=0 && y-2>=0 && !vstd[x-1][y-2])
{
u=(x-1)*m+y-2;
Q.push(u);
path.push(path.front()+1);
vstd[x-1][y-2]=1;
}
if (x+1>=0 && y-2>=0 && !vstd[x+1][y-2])
{
u=(x+1)*m+y-2;
Q.push(u);
path.push(path.front()+1);
vstd[x+1][y-2]=1;
}
if (x+1>=0 && y+2>=0 && !vstd[x+1][y+2])
{
u=(x+1)*m+y+2;
Q.push(u);
path.push(path.front()+1);
vstd[x+1][y+2]=1;
}
if (x-1>=0 && y+2>=0 && !vstd[x-1][y+2])
{
u=(x-1)*m+y+2;
Q.push(u);
path.push(path.front()+1);
vstd[x-1][y+2]=1;
}
if (x-2>=0 && y-1>=0 && !vstd[x-2][y-1])
{
u=(x-2)*m+y-1;
Q.push(u);
path.push(path.front()+1);
vstd[x-2][y-1]=1;
}
if (x-2>=0 && y+1>=0 && !vstd[x-2][y+1])
{
u=(x-2)*m+y+1;
Q.push(u);
path.push(path.front()+1);
vstd[x-2][y+1]=1;
}
if (x+2>=0 && y-1>=0 && !vstd[x+2][y-1])
{
u=(x+2)*m+y-1;
Q.push(u);
path.push(path.front()+1);
vstd[x+2][y-1]=1;
}
if (x+2>=0 && y+1>=0 && !vstd[x+2][y+1])
{
u=(x+2)*m+y+1;
Q.push(u);
path.push(path.front()+1);
vstd[x+2][y+1]=1;
}
Q.pop();
path.pop();
}
if (Q.empty())
printf("-1\n");
else
printf("%d\n",path.front());
}
return 0;
}
Sicily1781(广搜)
最新推荐文章于 2016-03-16 16:40:49 发布