hdu1072 nightmare
地圖能重復走……跟hdu1242不一點不同
[cpp]
#include<iostream>
#include<stdio.h>
#include<queue>
using namespace std;
int mp[10][10],m,n,Sx,Sy,Dx,Dy,flag,dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
bool visit[10][10];
struct point
{
int x,y,time,step;
};
void bfs(int x,int y)
{
int i;
point t,tt;
queue<point>Q;
t.x=x;t.y=y;t.step=0;t.time=6;
mp[t.x][t.y]=0;
Q.push(t);
// memset(visit,0,sizeof(visit));
while(!Q.empty())
{
t=Q.front();
Q.pop();//printf("%d,%d\n",t.x,t.y);
for(i=0;i<4;i++)
{
tt.x=t.x+dir[i][0];tt.y=t.y+dir[i][1]; tt.step=t.step+1;tt.time=t.time-1;
// printf("\t%d,%d",tt.x,tt.y);
if(tt.x<1||tt.x>m||tt.y<1||tt.y>n||mp[tt.x][tt.y]==0||tt.time==0) continue;
if(mp[tt.x][tt.y]==3){printf("%d\n",tt.step);return;}
// printf("!\n");
if(mp[tt.x][tt.y]==4){
mp[tt.x][tt.y]=0;
tt.time=6;
// memset(visit,0,sizeof(visit));
}
// mp[tt.x][tt.y]=0;
Q.push(tt);
}
// system("pause");
}
printf("-1\n");
return;
}
int main()
{
int T,i,j;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&m,&n);
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
scanf("%d",&mp[i][j]);
if(mp[i][j]==2) Sx=i,Sy=j;
}
}
bfs(Sx,Sy);
}
return 0;
}