按照题意给的方式,求从一个格子到另一个格子的最小步数,故bfs
一共八个方向,所以定义po数组~
队列的话,是用的stl。。什么时候应该试试手写,嗯
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
int length,sx,dx,sy,dy;
struct node{
int x,y,step;
};
int visit[310][310];
int po[8][2]={2,1,2,-1,1,2,1,-2,-2,1,-2,-1,-1,2,-1,-2};
int check(int x,int y)
{
if(x<0||x>=length||y<0||y>=length)return 1;
return visit[x][y];
}
void bfs()
{
memset(visit,0,sizeof(visit));
node a,b;
queue<node> Q;
a.x=sx;
a.y=sy;
a.step=0;
visit[sx][sy]=1;
Q.push(a);
while(!Q.empty())
{
a=Q.front();
Q.pop();
if(a.x==dx&&a.y==dy)
{
printf("%d\n",a.step);
return;
}
for(int i=0;i<8;i++)
{
b=a;
b.x=a.x+po[i][0];
b.y=a.y+po[i][1];
if(check(b.x,b.y))continue;
b.step=a.step+1;
visit[b.x][b.y]=1;
Q.push(b);
}
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&length);
scanf("%d%d%d%d",&sx,&sy,&dx,&dy);
bfs();
}
return 0;
}