题解 | #迷宫问题#
迷宫问题
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;
}

