一起talk C栗子吧(第四十七回:C语言实例--走迷宫一)


各位看官们,大家好,上一回中咱们说的是广度优先遍历的例子,这一回咱们说的例子是:走迷宫。闲话休提,言归正转。让我们一起talk C栗子吧!

看官们,我想大家都见过迷宫或者玩过迷宫类的小游戏吧,有时候觉得迷宫带一点神秘色彩,或者觉得它有如一团乱麻。今天咱们一起使用码来模拟迷宫,并且让计算机来揭开迷宫神秘的色彩,让算机帮助我们整理迷宫这团乱麻。

看官们,下面是一个走迷宫的图形,图形是网上找的,版权归原作者所有,哈哈。大家从图中可以看到迷宫的形状。图中的实线代表迷宫中的墙,图中的虚线是代表走出迷宫的通道。

这里写图片描述

迷宫的实现:我们使用一个二维数组来模拟迷宫,数组的大小代表迷宫的大小;数组中元素的值为0或者1.其中,0表示迷宫中的通道,1表示迷宫中的墙。

走迷宫的基本思路:看到通道就走,看到墙就绕开墙,换一个方向走。
PS:看官们是不是觉得太抽象了,看官莫急,接下来我们详细说一下走迷宫的步骤。

走迷宫的基本步骤:

  • 1.从迷宫中选择一个点当作入口或者起点,从入口或者起点处开始沿着一定的方向行走;
  • 2.行走的方向:右边->下边->左边->上边,这也是顺时针的方向;
  • 3.每走过一个点就在该点做一个“已经走过”的标记;
  • 4.如果某点的周围都有墙,也就是说走入了死胡同,返回该点的上一个点;
  • 5.从上一个点开始重复步骤1到步骤4,直到迷宫出口处为止。

看官们,正文中就不写代码了,详细的代码放到了我的资源中,大家可以点击这里下载使用。大家有没有发现代码中的迷宫就是一个邻接矩阵,我们走迷宫的原理,其本质就是遍历图。引用一句哲学里话:这就叫作透过现象看本质。我这么一说,大家在看看我们的代码,是不是有种似曾相识的感觉呢?没错,代码使用是的深度优先遍历图的方法。哈哈!

下面是例子中程序的运行结果。为了大家能够看清楚走迷宫的路径,每个路径都使用数字做标记,其中数字1表示第一步,数字2表示第二步,依此类推。

--- Show the Graph --- 
 1 | 0 | 0 | 1 | 1 | 0 |
 1 | 1 | 0 | 0 | 0 | 1 |
 1 | 0 | 0 | 1 | 0 | 1 |
 0 | 0 | 1 | 0 | 0 | 0 |
 0 | 1 | 0 | 0 | 1 | 0 |
 0 | 0 | 0 | 1 | 1 | 0 |

------  DFS ------  
 0 | 1 | 2 | 0 | 0 | 0 |
 0 | 0 | 3 | 4 |19 | 0 |
 0 | 6 | 5 | 0 |18 | 0 |
 8 | 7 | 0 |15 |16 |17 |
 9 | 0 |13 |14 | 0 |20 |
10 |11 |12 | 0 | 0 |21 |

各位看官,关于走迷宫的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值