题目链接:准备好了吗here~~~
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
int dx[4]={1,-1,0,0};
int dy[4]={0,0,-1,1};
int map[10][10];
int n,m;
struct Nightmare
{
int x,y;
int step;//前进的步数
int time;//每走一步剩余时间
};
int bfs(int a,int b)
{
queue<Nightmare> Q;
Nightmare q,p;
p.x=a;p.y=b;
p.step=0;p.time=6;
Q.push(p);
while(!Q.empty())
{
q=Q.front();Q.pop();
if(map[q.x][q.y]==3) return q.step;
if(q.time==1) continue;
for(int i=0;i<4;i++)
{
p.x=q.x+dx[i];
p.y=q.y+dy[i];
p.time=q.time-1;
p.step=q.step+1;
if(map[p.x][p.y])
{
if(map[p.x][p.y]==4)
{p.time=6;map[p.x][p.y]=1;}
Q.push(p);
}
}
}
return -1;
}
int main()
{
int N,x,y;;
scanf("%d",&N);
while(N--)
{
scanf("%d%d",&n,&m);
memset(map,0,sizeof(map));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
scanf("%d",&map[i][j]);
if(map[i][j]==2){x=i;y=j;}
}
}
printf("%d\n",bfs(x,y));
}
}