悲催用dfs时间效率那么差,用bfs貌似也行- -!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
const int inf=1<<30;
int n,m,map[10][10],sx,sy,ex,ey,time[10][10],dx[]={-1,1,0,0},dy[]={0,0,-1,1},ans[10][10],min;
void dfs(int x,int y)
{
int i;
if(map[x][y]==4)
time[x][y]=6;
if(map[x][y]==3)
{
if(min>ans[x][y])
min=ans[x][y];
}
else
for(i=0;i<4;i++)
{
int nx=x+dx[i],ny=y+dy[i];
if(nx>=0&&nx<n&&ny>=0&&ny<m&&map[nx][ny]&&time[nx][ny]<time[x][y]-1)
{
int temp1=time[nx][ny];
time[nx][ny]=time[x][y]-1;
int temp2=ans[nx][ny];
ans[nx][ny]=ans[x][y]+1;
dfs(nx,ny);
ans[nx][ny]=temp2;
time[nx][ny]=temp1;
}
}
}
int main()
{
int t,i,j;
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)
{
sx=i;
sy=j;
}
}
memset(time,0,sizeof(time));
min=inf;
time[sx][sy]=6;
ans[sx][sy]=0;
dfs(sx,sy);
if(min==inf)
printf("-1\n");
else
printf("%d\n",min);
}
return 0;
}