老鼠走迷宫2

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

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

#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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容