老鼠走迷宫2

2019-12-04  本文已影响0人  gtxe

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

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

#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
上一篇下一篇

猜你喜欢

热点阅读