/*
简单的广搜,不要犯错就行了
*/
#include<stdio.h>
#include<queue>
using namespace std;
struct node
{
int x,y;
};
int sx,sy,dx,dy,n;
int vis[301][301];
int dir[8][2]={1,2 ,2,1 ,2,-1 ,1,-2 ,-1,-2 ,-2,-1 ,-2,1 ,-1,2};
int bfs()
{
int i;
memset(vis,-1,sizeof(vis));
vis[sx][sy]=0;
node cur,next;
cur.x=sx;
cur.y=sy;
queue<node>q;
q.push(cur);
while(!q.empty())//缺了!
{
cur=q.front();
q.pop();
for(i=0;i<8;i++)
{
next.x=cur.x+dir[i][0];
next.y=cur.y+dir[i][1];
if(next.x>=0&&next.x<n&&next.y>=0&&next.y<n&&vis[next.x][next.y]==-1)//条件:1.在空间内;2.未访问过
{
if(next.x==dx&&next.y==dy)
return vis[cur.x][cur.y]+1;
q.push(next);
vis[next.x][next.y]=vis[cur.x][cur.y]+1;
}
}
}
return -1;
}
int main()
{
int t,i;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
scanf("%d%d%d%d",&sx,&sy,&dx,&dy);
if(sx==dx&&sy==dy)
{
printf("0\n");
continue;
}
i=bfs();
printf("%d\n",i);
}
return 0;
}
poj 1915 Knight Moves
最新推荐文章于 2019-04-26 18:14:18 发布