您的位置:首页 > 其它

算法之老鼠找迷宫2-找出所有出路

2017-12-05 10:30 204 查看
接着上一篇的想法,逻辑控制只找到了一条出路,现在我们想找出所有出路怎么办?

如果迷宫的设计使得走法不止一种,则只要在老鼠走至出口时显示出所有的路径,然后退回上一格重新选择下一个位置继续递归就可以了。如下图有两种走法。

#include<stdio.h>
#include<stdlib.h>
void visit(int,int);
int maze[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;//出口的位置

void visit(int i,int j)
{
int m,n;
maze[i][j] = 1;
//打印函数在递归函数里面,找到一条路径就打印
if(i == endI && j==endJ){
printf("\n show the path!\n");
for(m=0;m<9;m++){
for(n=0;n<9;n++)
if(maze[m]
==2)
printf("2");
else if(maze[m]
==1)
printf("1");
else
printf("0");
printf("\n");
}
}
if( maze[i+1][j]==0) visit(i+1,j);
if( maze[i-1][j]==0) visit(i-1,j);
if( maze[i][j+1]==0) visit(i,j+1);
if( maze[i][j-1]==0) visit(i,j-1);
maze[i][j]=0;
}
int main()
{
int i,j;
printf("show the maze!\n");
for(i=0;i<9;i++){
for(j=0;j<9;j++)
if(maze[i][j]==2)
printf("2");
else
printf("0");
printf("\n");
}
visit(startI,startJ);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: