说明由于迷宫的设计,老鼠走迷宫的入口至出口路径可能不只一条,如何求出所有的路径呢?
解法求所有路径看起来复杂但其实更简单,只要在老鼠走至出口时显示经过的路径,然后退回上一格重新选择下一个位置继续递回就可以了,比求出单一路径还简单,我们的程式只要作一点修改就可以了。
(好好思考,先找一个简单的迷宫走一次过程)
#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
网友评论