算法之老鼠找迷宫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;
}
如果迷宫的设计使得走法不止一种,则只要在老鼠走至出口时显示出所有的路径,然后退回上一格重新选择下一个位置继续递归就可以了。如下图有两种走法。
#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;
}
相关文章推荐
- 数据结构与算法学习之路:迷宫问题——回溯思想找出所有路径
- Java与算法之(12) - 老鼠再闯迷宫(广度优先算法)
- 【趣味算法题】在数组中,对于所有元素,找出比当前元素大的下一个元素
- YTU2899——险恶逃生 I(迷宫,找所有可能出路)
- 每天一算法(在二元树中找出和为某一值的所有路径(树))
- 微软等数据结构+算法面试100题(45)-- 在二元树中找出和为某一值的所有路径
- 数据结构经典算法学习之老鼠走迷宫01
- 微软算法100道题------在二元树中找出和为某一值的所有路径
- 快速算法入门——基于《算法》3-sum找出所有和为0的三元整数组
- 高效的算法找出中间所有A[i] = i的下标
- java实现从迷宫寻找出路算法(广度优先搜索)
- 算法题23 在二元树中找出和为某一值的所有路径
- 迷宫算法,找出一条路径(不一定最短)
- 算法讨论(三)---在二元树中找出和为某一值的所有路径
- 每日一道算法题4——在二元树中找出和为某一值的所有路径
- 算法面试100题——4.在二元树中找出和为某一值的所有路径
- 从长度为N的数组中找出所有M个元素组合的优化算法
- java 找出一个英文句子中所有单词算法
- 算法与数据结构面试题(4)-在二元树中找出和为某一值的所有路径
- 算法性能比较(一)——找出小于等于n的所有素数