Unity寻路专题(二)——BFS

    
    
* * 对上一章的补充 * * :DFS用到的数据结构为栈,所以很容易联想到系统栈,也就是递归。DFS也可以用递归实现,感兴趣的读者可自行尝试。 这一章我们来讲BFS,BFS(广度优先搜索),它与上一章的DFS不同,DFS采取一条路走到黑的策略,并且找到的路径一般不是最优路径。而对于BFS来说,它采取的是一种波状推进的形式,能够保证路径是最优的。 * * 举个形象的栗子 * * :你路过一条河,你捡起一块石头向着河里丢去,这时石头落水的地方是不是会产生一圈涟漪,并且会向着周围扩散,这时河面上正好有一片树叶,当波纹不断扩散,最终碰到树叶,是不是就相当于找到了树叶。BFS也就是这个思路。其采取了队列这种数据结构实现。 代码模板: ①创建一个Queue作为容器,再创建一个List存放已经搜索过的点。 ②将开始节点放入队列,开始循环。 ③每次循环从对列中取出队头的节点S,判断S是否是目标点,是就找到了一条路径,终止算法;否则 将S放入closeList中代表已经搜索过。然后找到S的所有后继节点(也就是和S直接关联的节点),若不在 closeList则放入队列,若在closeList里就跳过该节点。 ④重复循环
源码:
效果图:
可以看出,BFS搜索范围大,但找到的路径是最优路径其中之一。BFS,DFS都是暴力搜索,都伴随着极大的性能消耗,所以一般不用于游戏中,但没有它们也不会出现后面这些更加优化的算法,后面要讲的几个寻路算法都是建立在BFS,DFS之上的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值