My code:
#include<iostream>
#include<queue>
#define MAX 305
using namespace std;
struct point
{
int x,y;
int step;
};//到达的点,和需要的步数
int dx[8]={-2,-2,-1,-1,1,1,2,2};
int dy[8]={1,-1,2,-2,2,-2,1,-1};
bool vis[MAX][MAX];
int sx,sy,ex,ey,tx,ty,L;
int bfs()
{
memset(vis,false,sizeof(vis));//初始化
queue<point> Q;//定义个队列
point start,node;
start.x=sx;//
start.y=sy;//
start.step=0;//队列初始化
Q.push(start);//压进队列
int step,x,y;
while(!Q.empty())
{
start=Q.front();Q.pop();//取队列的头元素,同时把这个元素弹出 (队列从后往前进,先进的先出)
x=start.x;
y=start.y;
step=start.step;//把队列头元素的x,y,step取出
if(x==ex&&y==ey) return step;//判断
for(int i=0;i<8;i++)//扩展
{
tx=x+dx[i];
ty=y+dy[i];
if(tx>=0&&tx<L&&ty>=0&&ty<L&&!vis[tx][ty])
{
node.x=tx;
node.y=ty;
node.step=step+1;
Q.push(node);//满足条件的进队列
vis[tx][ty]=true;
}
}
}
}
int main()
{
int N;
scanf("%d",&N);
while(N--)
{
scanf("%d",&L);
scanf("%d%d",&sx,&sy);
scanf("%d%d",&ex,&ey);
printf("%d\n",bfs());
}
}