冰球
#include<stdio.h> int map[99][99]; int mov1[4]={1,0,-1,0}; int mov2[4]={0,-1,0,1}; int sx; int sy; int ex; int ey; int X; int Y; int min; void milu(int x,int y,int step) { if(step>min) return; if(step==10) return; for(int i=0;i<4;i++) { int nx=x+mov1[i]; int ny=y+mov2[i]; if(map[nx][ny]==1) continue; int flagg=0; while(map[nx][ny]==0) { nx+=mov1[i]; ny+=mov2[i]; if(nx<0||nx>=X||ny<0||ny>=Y) { flagg=1; break; } } if(flagg==1) continue; if(map[nx][ny]==3) { if(min>step) min=step; return ; } else if(map[nx][ny]==1) { map[nx][ny]=0; } milu(nx-mov1[i],ny-mov2[i],step+1); if(map[nx][ny]==0) map[nx][ny]=1; } } int main() { //freopen("in.txt","r",stdin); while(scanf("%d%d",&Y,&X)) { min=999; if(Y==0&&X==0) break; for(int i=0;i<X;i++) { for(int j=0;j<Y;j++) { scanf("%d",&map[i][j]); if(map[i][j]==2) { sx=i; sy=j; map[i][j]=0; } } } milu(sx,sy,0); if(min==999) printf("-1\n"); else printf("%d\n",min+1); } return 0; }