//poj 1915 BFS
//AC 2014/1/6
#include <iostream>
#include <fstream>
#include <cstdio>
#include <queue>
using namespace std;
const int MAXN=301;
bool vis[MAXN][MAXN];
int Startx,Starty,Endx,Endy;
queue<int> que;
int S;
int ans;
struct Dir
{
int x,y;
};
Dir dirs[8]=
{
{-2,1},
{-2,-1},
{-1,-2},
{1,-2},
{2,-1},
{2,1},
{1,2},
{-1,2},
};
bool in(int a,int b)
{
if(a>=0 && a<S && b>=0 && b<S)return true;
return false;
}
int bfs()
{
int col,row,i;
while(!que.empty())
{
//col=que.front();
row=que.front();
que.pop();
//row=que.front();
col=que.front();
que.pop();
ans=que.front();
que.pop();
if(row==Endx && col==Endy)
return ans;
for(i=0;i<8;i++)
{
if(in(row+dirs[i].x,col+dirs[i].y) &&
!vis[row+dirs[i].x][col+dirs[i].y])
{
//que.push(col+dirs[i].y);
que.push(row+dirs[i].x);
que.push(col+dirs[i].y);
que.push(ans+1);
vis[row+dirs[i].x][col+dirs[i].y]=true;
}
}
}
}
int main()
{
//cout << "Hello world!" << endl;
freopen("input.txt","r",stdin);
int T;
cin>>T;
for(int i=0;i<T;i++)
{
while(!que.empty())
que.pop();
cin>>S;
for(int j=0;j<S;j++)
for(int k=0;k<S;k++)
vis[j][k]=false;
scanf("%d%d",&Startx,&Starty);
scanf("%d%d",&Endx,&Endy);
//cout<<"-----"<<endl;
//cout<<Startx<<" "<<Starty<<endl;
//cout<<Endx<<" "<<Endy<<endl;
/*
if(Startx==Endx && Starty==Endy)
{
cout<<"0"<<endl;
continue;
}
*/
ans=0;
que.push(Startx);
que.push(Starty);
que.push(ans);
vis[Startx][Starty]=true;
ans=bfs();
cout<<ans<<endl;
}
fclose(stdin);
return 0;
}
poj 1915
最新推荐文章于 2019-07-18 22:35:00 发布