题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=58
普通广搜 用队列模拟
#include<cstdio>
#include<queue>
using namespace std;
struct point
{
int x,y,step;
};
int dir[4][2]={-1,0,0,1,1,0,0,-1};
int BFS(point s,point t,int map[9][9])
{
queue<point> q;
int i;
point tmp;
q.push(s);
while(1)
{
if(s.x==t.x&&s.y==t.y)
return s.step;
for(i=0;i<4;++i)
{
tmp.x=s.x+dir[i][0];
tmp.y=s.y+dir[i][1];
if(map[tmp.x][tmp.y]==0)
{
tmp.step=s.step+1;
map[tmp.x][tmp.y]=1;
q.push(tmp);
}
}
s=q.front();
q.pop();
}
}
int main()
{
int T;
point s,t;
scanf("%d",&T);
while(T--)
{
int map[9][9]={1,1,1,1,1,1,1,1,1,
1,0,0,1,0,0,1,0,1,
1,0,0,1,1,0,0,0,1,
1,0,1,0,1,1,0,1,1,
1,0,0,0,0,1,0,0,1,
1,1,0,1,0,1,0,0,1,
1,1,0,1,0,1,0,0,1,
1,1,0,1,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,};
scanf("%d%d%d%d",&s.x,&s.y,&t.x,&t.y);
s.step=0;
map[s.x][s.y]=1;
printf("%d\n",BFS(s,t,map));
}
return 0;
}