走迷宫算法

5 篇文章 0 订阅
从起点问题的提出:
    在游戏地图中,如何寻找一条从起点到终点的最短行路线路?

数据表达:

使用M*N大小的byte数组 来表示地图,每个位置的状态用0表示可走,1表示墙,2表示起点,3表示终点,128表示路径;
行走规则有两种:
4方向行走规则:只能从当前点向上,下,左,右 这4个方向行走;
8方向行走规则:可以从当前点向上,下,左,右,左上,左下,右上,右下,这8个方向行走;
行走方向编码:
 3 2 1
 4  0
 5 6 7




目标:
    尽快找出一条从起点到终点的路径,最好能使得路径最短,且转弯次数最少。

算法思路:
思路一:
从当前点开始,往目标点方向前进,当遇到障碍时,改变方向,转到另一个可以前进的方向,同时在转变方向后修正前进方向;
优点: 可以很快找到一条路径;但不能保证最短

思路二:
    使用宽度优先搜索算法,从起点开始,寻找出所有走一步所能到达的位置,记录这些位置,再从这些位置开始,寻找出所有
再走一步(即从起点走2步)所能到达的位置,不断继续,直到找到目标点止。然后从记录的这些位置(像一棵树)中找出路径;

优缺点: 需要记录大量位置,使用大量内存;可寻找出一条或者所有的最短路径。

路径优化算法:

    假设已经找出了一条路径,则有可能在路径的某一段上存在"绕弯"的情况,重复走或者是多走了,这样路径

就不是最短了.优化算法如下:

1.设起点为当前点;

2.从终点开始向当前点逐个节点设为测试点进行测试;

3.若当前点到测试点之间存在直接路径(即直线路径),

4.则比较直线路径的长度与路径上两点的长度,如果大于直线路径长,则

5.将当前点到测试点之间的路径用直线路径代替

6.然后将测试点设置为当前点,转第2步;

7.直到当前点为终点为止;


    为了方便生成地图,特编制了简单的程序,可以设置起点,终点以及障碍(即墙).

目前程序版本为V1.0.7,已经实现最短路径算法及优化算法.截图如下:


 

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值