思路:
只是一个dfs搜索题,还是太菜,come on,baby
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int inf=0x3f3f3f3f;
const int Max_n=110;
const int Max_m=110;
int n,m;
int s[Max_n][Max_n];
int step;
void dfs(int x,int y,int k){
if(k>=10)return;
if(s[x-1][y]!=1){
for(int i=x-1;i>=1;i--){
if(s[i][y]==3){step=min(step,k+1);return;}
if(s[i][y]==1){
s[i][y]=0;
dfs(i+1,y,k+1);
s[i][y]=1;
break;
}
}
}
if(s[x+1][y]!=1){
for(int i=x+1;i<=n;i++){
if(s[i][y]==3){step=min(step,k+1);return;}
if(s[i][y]==1){
s[i][y]=0;
dfs(i-1,y,k+1);
s[i][y]=1;
break;
}
}
}
if(s[x][y+1]!=1){
for(int i=y+1;i<=m;i++){
if(s[x][i]==3){step=min(step,k+1);return;}
if(s[x][i]==1){
s[x][i]=0;
dfs(x,i-1,k+1);
s[x][i]=1;
break;
}
}
}
if(s[x][y-1]!=1){
for(int i=y-1;i>=1;i--){
if(s[x][i]==3){step=min(step,k+1);return;}
if(s[x][i]==1){
s[x][i]=0;
dfs(x,i+1,k+1);
s[x][i]=1;
break;
}
}
}
}
int main()
{
while(~scanf("%d%d",&m,&n)&&n+m){
memset(s,0,sizeof(s));
step=inf;
int x,y;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("%d",&s[i][j]);
if(s[i][j]==2){x=i;y=j;}
}
}
dfs(x,y,0);
if(step!=inf)printf("%d\n",step);
else printf("-1\n");
}
return 0;
}