#include<iostream>
#include<stdio.h>
#include<string.h>
#include<cstring>
#include<algorithm>
#include<stack>
#define ll long long
#define N 200000
#include<queue>
using namespace std;
int a,b;
int vis[30][30];
int linshi,daan,s_x,s_y,g_x,g_y;
int dir[4][2]={0,-1,-1,0,0,1,1,0};
int qiang(int x,int y){
if(vis[x][y]==1)return 1;
return 0;
}
int chujie(int x,int y){
return (x<0||y<0||x==b||y==a);
}
void dfs(int x,int y,int n){
if(n>10)return ;
for(int i=0;i<4;i++){
int xx=x,yy=y;
xx+=dir[i][0];
yy+=dir[i][1];
if(chujie(xx,yy)){
continue;
}
if(qiang(xx,yy)){
continue;
}
if(xx==g_x&&yy==g_y){
daan=min(daan,n);
continue;
}
while(1){
xx+=dir[i][0];
yy+=dir[i][1];
if(chujie(xx,yy)){
break;
}
if(qiang(xx,yy)){
vis[xx][yy]=0;
dfs(xx-dir[i][0],yy-dir[i][1],n+1);
vis[xx][yy]=1;
break;
}
if(xx==g_x&&yy==g_y){
daan=min(daan,n);
break;
}
}
}
}
int main(){
freopen("input2.txt","r",stdin);
while(scanf("%d%d",&a,&b)&&a!=0&&b!=0){
daan=12;
for(int i=0;i<b;i++){
for(int j=0;j<a;j++){
cin>>linshi;
if(linshi==1){
vis[i][j]=1;
}
else vis[i][j]=0;
if(linshi==2){
s_x=i;
s_y=j;
}
else if(linshi==3){
g_x=i;
g_y=j;
}
}
}
dfs(s_x,s_y,1);
if(daan==12)cout<<"-1\n";
else cout<<daan<<endl;
}
return 0;
}
poj3009
最新推荐文章于 2020-05-02 10:22:49 发布