#include<stdio.h>
#define max 9
int map[max][max],n,m,xi,yi;
int next[4][2]={1,0,0,1,-1,0,0,-1};
struct point
{
int x,y;
int cost; //花费时间
int s; //剩余时间
}queue[3000];
int bfs()
{
int sum=0,i,j,a,b;
queue[0].x=xi;
queue[0].y=yi;
queue[0].cost=0;
queue[0].s=6;
for(i=0;i<=sum;i++)
{
for(j=0;j<4;j++)
{
a=queue[i].x+next[j][0];
b=queue[i].y+next[j][1];
if(a<n && b<m && a>=0 && b>=0 && map[a][b]!=0 && queue[i].s>1)
{
if(map[a][b]==3)
return queue[i].cost+1;
else if(map[a][b]==1)
{
queue[++sum].cost=queue[i].cost+1;
queue[sum].s=queue[i].s-1;
queue[sum].x=a;
queue[sum].y=b;
}
else if(map[a][b]==4)
{
queue[++sum].cost=queue[i].cost+1;
queue[sum].s=6;
queue[sum].x=a;
queue[sum].y=b;
map[a][b]=0;
}
}
}
}
return -1;
}
int main()
{
int i,j,t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%d",&map[i][j]);
if(map[i][j]==2)
{
xi=i;
yi=j;
}
}
}
printf("%d\n",bfs());
}
return 0;
}
hdu1072 Nightmare C语言编写 广搜加队列 注意不要把所有走过的路封死 只封4的路 逃出后时间大于0
最新推荐文章于 2022-02-25 19:38:17 发布