美文网首页
老鼠走迷宫2

老鼠走迷宫2

作者: gtxe | 来源:发表于2019-12-04 10:13 被阅读0次

    说明由于迷宫的设计,老鼠走迷宫的入口至出口路径可能不只一条,如何求出所有的路径呢?
    解法求所有路径看起来复杂但其实更简单,只要在老鼠走至出口时显示经过的路径,然后退回上一格重新选择下一个位置继续递回就可以了,比求出单一路径还简单,我们的程式只要作一点修改就可以了。

    (好好思考,先找一个简单的迷宫走一次过程)

    #include <stdio.h>
    #include <stdlib.h>
    
    void visit(int ,int);
    int a[9][9]={{2, 2, 2, 2, 2, 2, 2, 2, 2},
                 {2, 0, 0, 0, 0, 0, 0, 0, 2},
                 {2, 0, 2, 2, 0, 2, 2, 0, 2},
                 {2, 0, 2, 0, 0, 2, 0, 0, 2},
                 {2, 0, 2, 0, 2, 0, 2, 0, 2},
                 {2, 0, 0, 0, 0, 0, 2, 0, 2},
                 {2, 2, 0, 2, 2, 0, 2, 2, 2},
                 {2, 0, 0, 0, 0, 0, 0, 0, 2},
                 {2, 2, 2, 2, 2, 2, 2, 2, 2}};
    int starti=1,startj=1;
    int endi=7,endj=7;
    int num=0;
    
    int main()
    {
       int i,j;
       printf("显示路径:\n");
       for(i=0;i<9;i++)
       {
           for(j=0;j<9;j++)
            {
                if(a[i][j]==2) printf("█");
                else printf("  ");
            }
            printf("\n");
       }
       visit(starti,startj);
    
       return 0;
    }
    
    void visit(int i,int j)
    {
        a[i][j]=1;
        if(i==endi&&j==endj)
        {
            num++;
            printf("第%d条路为:\n",num);
            int m,n;
            for(m=0;m<9;m++)
            {
                for(n=0;n<9;n++)
                    {
                        if(a[m][n]==2) printf("█");
                        else if(a[m][n]==1) printf("◇");
                        else printf("  ");
                    }
                printf("\n");
            }
        }
    
        if(a[i][j+1]==0)  visit(i,j+1);
        if(a[i+1][j]==0)  visit(i+1,j);
        if(a[i][j-1]==0)  visit(i,j-1);
        if(a[i-1][j]==0)  visit(i-1,j);
        a[i][j]=0;
    
    }
    
    image.png

    相关文章

      网友评论

          本文标题:老鼠走迷宫2

          本文链接:https://www.haomeiwen.com/subject/qierfqtx.html