第一题。。。效率赶赶地
Accode:
#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int NS=330;
struct Point{
int x,y;
Point(){}
Point(int cx,int cy):x(cx),y(cy){}
}qu[NS*NS];
int n,it;
int sx,sy,ex,ey;
int bel[NS][NS];
int val[NS][NS];
int dx[]={1,1,-1,-1,2,2,-2,-2};
int dy[]={2,-2,2,-2,1,-1,1,-1};
bool isin(int x,int y){
return (x<n&&y<n&&x>=0&&y>=0);
}
int bibfs()
{
if (sx==ex&&sx==ey)
return 0;
int nx,ny;
int lft=0,rgt=0;
for (int i=0;i<n;i++)
for (int j=0;j<n;j++)
val[i][j]=bel[i][j]=0;
qu[rgt++]=Point(sx,sy);
qu[rgt++]=Point(ex,ey);
bel[sx][sy]=1; bel[ex][ey]=2;
while (lft<rgt)
{
Point cur=qu[lft++];
for (int i=0;i<8;i++)
{
nx=cur.x+dx[i];
ny=cur.y+dy[i];
if (isin(nx,ny))
{
if (!bel[nx][ny])
{
qu[rgt++]=Point(nx,ny);
bel[nx][ny]=bel[cur.x][cur.y];
val[nx][ny]=val[cur.x][cur.y]+1;
}
else if (bel[cur.x][cur.y]!=bel[nx][ny])
return val[cur.x][cur.y]+val[nx][ny]+1;
}
}
}
}
int main()
{
int T;
for (scanf("%d",&T);T--;)
{
scanf("%d",&n);
scanf("%d%d",&sx,&sy);
scanf("%d%d",&ex,&ey);
int ans=bibfs();
printf("%d\n",ans);
}
return 0;
}