#include<stdio.h>
int m,n;
int map[10][10];
int to[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int mark[10][10];
struct
{
int x,y,time,id;
}queue[100],now,next,s,e;
int bfs()
{
int fr,ed,i,j;
fr=ed=0;
s.time=0;
s.id=0;
queue[ed++]=s;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
mark[i][j]=6;
}
}
mark[s.x][s.y]=0;
while(fr<ed)
{
now=queue[fr++];
if(now.x==e.x&&now.y==e.y)
{
return now.id;
}
for(i=0;i<4;i++)
{
next.x=now.x+to[i][0];
next.y=now.y+to[i][1];
next.time=now.time+1;
if(next.x<0||next.x>=m||next.y<0||next.y>=n||mark[next.x][next.y]<=next.time||map[next.x][next.y]==0)
{
continue;
}
if(map[next.x][next.y]==4)
{
next.time=0;
}
mark[next.x][next.y]=next.time;
next.id=now.id+1;
queue[ed++]=next;
}
}
return -1;
}
int main()
{
int t;
int i,j;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&m,&n);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&map[i][j]);
if(map[i][j]==2)
{
s.x=i;
s.y=j;
}
if(map[i][j]==3)
{
e.x=i;
e.y=j;
}
}
}
printf("%d\n",bfs());
}
}
Hdu1072 - Nightmare - 广度优先搜索
最新推荐文章于 2024-07-29 14:00:00 发布