双向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的主要内容,如果未能解决你的问题,请参考以下文章

HDU3085nightmare2 双向BFS

双向BFS

POJ1915Knight Moves(单向BFS + 双向BFS)

HDU 1043 Eight(双向BFS+康托展开)

Knight Moves (双向bfs)

BFS实际应用题[思维扩展]——双向BFS与A*启发式搜索