题解 | #迷宫问题#

迷宫问题

https://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc

#include <stdio.h>
int min=105;
int n,m;
int p[15][15],a[105][5],b[105][5],mat[15][15];
void dps(int x,int y,int step){
    if(x==n-1&&y==m-1){
        if(min>step){
            min=step;
            for(int i=0;i<=min;i++){
                b[i][0]=a[i][0];
                b[i][1]=a[i][1];
            }            
        }
        return;
    }
    if(x-1>=0){
        if(mat[x-1][y]==0&&p[x-1][y]==0){
            mat[x-1][y]=1;
            a[step+1][0]=x-1;
            a[step+1][1]=y;
            dps(x-1,y,step+1);
            mat[x-1][y]=0;
        }        
    }
    if(x+1<n){
        if(mat[x+1][y]==0&&p[x+1][y]==0){
            mat[x+1][y]=1;
            a[step+1][0]=x+1;
            a[step+1][1]=y;
            dps(x+1,y,step+1);
            mat[x+1][y]=0;
        }      
    }
    if(y-1>=0){
        if(mat[x][y-1]==0&&p[x][y-1]==0){
            mat[x][y-1]=1;
            a[step+1][0]=x;
            a[step+1][1]=y-1;
            dps(x,y-1,step+1);
            mat[x][y-1]=0;
        }        
    }
    if(y+1<m){
        if(mat[x][y+1]==0&&p[x][y+1]==0){
            mat[x][y+1]=1;
            a[step+1][0]=x;
            a[step+1][1]=y+1;
            dps(x,y+1,step+1);
            mat[x][y+1]=0;
        }
    }
}

int main() {
    scanf("%d %d",&n,&m);
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++){
            scanf("%d",&p[i][j]);
            mat[i][j]=0;
        }
    a[0][0]=0;a[0][1]=0;
    dps(0,0,0);   
    for(int i=0;i<=min;i++)
        printf("(%d,%d)\n",b[i][0],b[i][1]);    
    return 0;
}

全部评论

相关推荐

03-19 10:07
已编辑
广东药科大学 golang
Yki_:你倒是进一个面啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务