深度优先算法随机一条路径/ 广度优先算法随机一条最短路径

简单的路径随机

一、生产需求针对互动有随机路径需求情况,产出三种情况下的路径随机

     1、四个方向/八个方向的随机,每次路径走到尽头处理回溯删除无效路经点-直到找到目标----DepthFirstSearch(深度优先)。
        优点:路径相对随机。
        缺点:相对比较耗时间(慢在处理回溯问题上),相对目前的互动是没有问题。
     2、四个方向/八个方向的随机,直到找到目标利用目标反向推到出一条最短路径----BreadthFirstSearc(深度优先)。
        优点:路径相对最短。
        缺点:相对比较耗时间,内存相对高一些(),相对目前的互动是没有问题。
     3、四个方向/八个方向顺序搜索(每次找到的是一个距离目标最近点为当前节点,目的:增加计算速度),利用障碍物实现路径的随机生成。
        优点:路径相对于障碍物配置情况出现不同效果,速度相对比较快速。
        缺点:需要思考障碍物的位置,不能出现堵死的情况。

二、深度/广度搜索过程简单介绍:
1、使用图展示遍历过程如下,比如便利下图结构:
在这里插入图片描述

a: 准备一个栈/队列(存储结构),并与定义出三种状态:未访问状态/准备访问状态/已经访问状态。
b: 从结构中访问节点1,并标记为已经访问节点;找到相邻节点且未被 访问的节点2/3/4压入存储结构,并标记为准备访问。
已经访问节点:1
准备访问节点2/3/4.
没有被访问节点5/6.
重复如上过程知道所有的节点都被访问,也就是存储结构不存在存储数据~。

2、两种搜索情况对比 :

深度优先算法占内存少但速度较慢,广度优先算法占内存多但速度较快,在距离和深度成正比的情况下能较快地求出最优解。
深度优先与广度优先的控制结构和产生系统很相似,唯一的区别在于对扩展节点选取上。由于其保留了所有的前继节点,所以在产生后继节点时可以去掉一部分重复的节点,从而提高了搜索效率。
这两种算法每次都扩展一个节点的所有子节点,而不同的是,深度优先下一次扩展的是本次扩展出来的子节点中的一个,而广度优先扩展的则是本次扩展的节点的兄弟点。在具体实现上为了提高效率,所以采用了不同的数据结构。

三、效果展示和代码说明

DepthFirstSearch:一条路径走到尽头,在回溯到其路径。
1.输出路径如下图和代码简略图,主要问题集中在6中的路径回溯问题上。 思路:一条路走到尽头的时候则进入回溯处理,路径数组中根据回溯到的点判断,然后删除无效路径点。(具体判断逻辑:
存储结构中的数据具备方向从而得出该回溯点从哪个方向加入)

在这里插入图片描述
在这里插入图片描述

BreadthFirstSearc: 有点类似各方向的并行搜索,不过先后次序。
1.和深度是一样的不过存储结构更换为队列。
2.到搜索到目标后,更具存储结构中的信息(有方向),根据方向信息反向推导出一个路径。

在这里插入图片描述
在这里插入图片描述

3.结合上面两种情况缺点,完善了一版本(同样是图遍历的思想,每次取距离目标最小的值作为当前节点),效果如下这样速度相对比较快速
在这里插入图片描述

代码存储 :https://gitee.com/songhuiyuan/random-path-problem.git

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值