这个代码的话,直接用的递归回溯从最后遍历到最前面解决的,其实一直有个问题很疑惑,多次重复利用的数组,每次初始化会有些麻烦。
#include<stdio.h>
#include<string.h>
struct point{
int x;
int y;
}p[15][15];
int g[15][15],vis[15][15];
int n,m,tx,ty;
int dx[2]={-1,0};
int dy[2]={0,-1};
//深搜
void dfs(int x,int y){
if(x==0&y==0){
return;
}else{
for(int i=0;i<2;i++){
tx=x+dx[i];
ty=y+dy[i];
if(tx>=0&&tx<n&&ty>=0&&ty<m&&vis[tx][ty]==0&&g[tx][ty]==0){
p[tx][ty].x=x;
p[tx][ty].y=y;
vis[tx][ty]=1;
dfs(tx,ty);
vis[tx][ty]=0;
}
}
}
}
int main(){
while(scanf("%d %d",&n,&m)!=EOF){
memset(g,0,sizeof(g));
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
scanf("%d",&g[i][j]);
}
}
dfs(n-1,m-1);
int sx=0,sy=0;
while(1){
printf("(%d,%d)\n",sx,sy);
if(sx==n-1&&sy==m-1){
break;
}
int tx=sx;
int ty=sy;
sx=p[tx][ty].x;
sy=p[tx][ty].y;
}
}
return 0;
}