poj 3009(深度搜索)
来源:互联网 发布:ios数据存储方式 编辑:程序博客网 时间:2024/04/30 20:20
#include<stdio.h>#include<string.h>#include<iostream>using namespace std;#define N 22int map[N][N];int minstep;int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};int w,h;bool check(int x,int y){ if(x>=1 && x<=h && y>=1 && y<=w) return 1; return 0;}void dfs(int step ,int x, int y){ if(step>= 10) return ; for(int i=0;i<4;i++) { int xx=x+dir[i][0]; int yy=y+dir[i][1]; if(map[xx][yy]== 1) continue; while(map[xx][yy]==0) { xx=xx+dir[i][0]; yy=yy+dir[i][1]; } if(check(xx,yy)) { if(map[xx][yy]==1) { map[xx][yy]=0; dfs(step+1,xx-dir[i][0],yy-dir[i][1]); map[xx][yy]=1; } if(map[xx][yy]==3) { if(step+1<minstep) minstep=step+1; } } }} int main(){ int i,j; int dx,dy; while(scanf("%d%d",&w,&h)!=EOF) { if(w==0 && h==0) break; //memset( map,0,sizeof(map) ); for(i=1;i<=h;i++) for(j=1;j<=w;j++) { cin>>map[i][j]; if(map[i][j] == 2) { dx=i; dy=j; map[i][j]=0; } } minstep=9999999; dfs(0,dx,dy); // dfs(0,dx,dy); if(minstep<=10) printf("%d\n",minstep); else printf("-1\n"); } return 0;}