双向BFS
Posted denerate
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了双向BFS相关的知识,希望对你有一定的参考价值。
如果已经知道搜索的开始状态和结束状态,要找一个满足某种条件的一条路径(一般是最短路径),为了避免无谓的“组合爆炸”产生,就可以采取双向广度搜索算法,也就是从开始状态和
结束状态同时开始搜索,一个向前搜,一个向后找。
这样做的好处是什么?
我们不妨假设每次搜索的分支因子是r,如果最短的路径长为L的话(也就是搜了L层),那么,用一般的BFS算法(不考虑去掉重复状态),总的搜索状态数是r^L(^表示乘方运算);而
如果采取双向BFS算法,那么,从前往后搜,我们只需要搜索L/2层,从后往前搜,我们也只要搜L/2层,因此,搜索状态数是2*(r^(L/2)),比普通BFS就快了很多了。
双向BFS算法的实质还是BFS,只不过两边同时开始BFS而已。还是可以利用队列来实现:可以设置两个队列,一个用于向前的BFS,另一个用于向后的BFS,利用这两个队列,同时从前、
后开始层次遍历搜索树
以上是关于双向BFS的主要内容,如果未能解决你的问题,请参考以下文章