1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| #include<bits/stdc++.h> using namespace std; int n,m,flag=0,Min; int Map[100][100]; int vis[100][100]; int dir[4][2]={0,1,0,-1,-1,0,1,0}; int stepA[100][2]; int stepB[100][2]; void dfs(int x,int y,int step){ if(step>Min){ return; } if(x==n&&y==m){ for(int i=0;i<100;i++){ if(stepA[i][0]==-1&&stepA[i][1]==-1){ break; } stepB[i][0]=stepA[i][0]; stepB[i][1]=stepA[i][1]; } Min=step; return; } for(int i=0;i<4;i++){ int xx=x+dir[i][0]; int yy=y+dir[i][1]; if(xx<=0||yy<=0||xx>n||yy>m){ continue; } if(!vis[xx][yy]&&Map[xx][yy]==0){ stepA[step][0]=xx; stepA[step][1]=yy; vis[xx][yy]=1; dfs(xx,yy,step+1); vis[xx][yy]=0; } } return; } int main(){ while(scanf("%d %d",&n,&m)&&m!=-1){ for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ scanf("%d",&Map[i][j]); } } memset(vis,0,sizeof(vis)); memset(stepA,-1,sizeof(stepA)); memset(stepB,-1,sizeof(stepB)); vis[1][1]=1; Min=10000; dfs(1,1,0); if(Min==10000){ printf("NO FOUND\n"); } else{ printf("1,1\n"); for(int i=0;i<Min;i++){ printf("%d,%d\n",stepB[i][0],stepB[i][1]); } printf("\n"); } } return 0; }
|