#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <iostream>
#include <math.h>
#include"queue"
using namespace std;
const int maxn=300;
int l;
int visit[maxn][maxn];
int dir[8][2]={{-2,1},{-1,2},{2,1},{1,2},{-2,-1},{-1,-2},{2,-1},{1,-2}};
struct point{
int x,y,step;
point()
{
x=y=step=0;
}
}Start,End;
bool equal(point a,point b)
{
return a.x==b.x&&a.y==b.y;
}
int bfs()
{
queue<point>dot;
dot.push(Start);
visit[Start.x][Start.y]=1;
while(!dot.empty())
{
point next,cur;
cur=dot.front();
dot.pop();
for(int 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<l&&next.y>=0&&next.y<l&&!visit[next.x][next.y])
{
if(equal(next,End)) return cur.step+1;
visit[next.x][next.y]=1;
next.step=cur.step+1;
dot.push(next);
}
}
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(visit,0,sizeof(visit));
scanf("%d",&l);
scanf("%d%d%d%d",&Start.x,&Start.y,&End.x,&End.y);
if(equal(Start,End)) {printf("%d\n",0);continue;}
int ans=bfs();
printf("%d\n",ans);
}
return 0;
}
POJ1915 BFS
最新推荐文章于 2020-02-16 23:37:55 发布