题解 | #迷宫问题#
迷宫问题
https://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc
#include <stdio.h> #include <string.h> int visit[11][11]={0};//记录状态 char a[200]={0};//记录路径 int map[11][11];//记录地图 int m,n,k; int qx,qy; int ztx[4]={0,1,0,-1},zty[4]={1,0,-1,0}; void put(int k){ int i,x=0,y=0; printf("(%d,%d)\n",x,y); for(i=1;i<k;i++){ if(a[i]=='w'){y++;printf("(%d,%d)\n",x,y);} else if(a[i]=='s'){y--;printf("(%d,%d)\n",x,y);} else if(a[i]=='a'){x--;printf("(%d,%d)\n",x,y);} else if(a[i]=='d'){x++;printf("(%d,%d)\n",x,y);} } }; void xl(int x,int y,int k){ int i;int dx,dy; if(x==m-1&&y==n-1) put(k); for(i=0;i<4;i++){ dx=x;dy=y; dx=x+ztx[i]; dy=y+zty[i]; if(i==0) a[k]='w'; else if(i==1) a[k]='d'; else if(i==2) a[k]='s'; else if(i==3) a[k]='a'; if(visit[dx][dy]==0&&map[dx][dy]==0&&dx<m&&dy<n&&dx>-1&&dy>-1) {visit[dx][dy]=1; xl(dx,dy,k+1); visit[dx][dy]=0;} } }; int main() { while (scanf("%d %d", &m, &n) != EOF) { int i,j; for(i=0;i<m;i++){ for(j=0;j<n;j++) scanf("%d",&map[i][j]); } qx=0;qy=0; visit[0][0]=1; xl(qy,qx,1); } return 0; }