码迷,mamicode.com
首页 > 其他好文 > 详细

双向BFS

时间:2020-01-20 23:07:35      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:算法   是什么   最短路径   表示   很多   状态   line   bfs   nbsp   

如果已经知道搜索的开始状态和结束状态,要找一个满足某种条件的一条路径(一般是最短路径),为了避免无谓的“组合爆炸”产生,就可以采取双向广度搜索算法,也就是从开始状态和

结束状态同时开始搜索,一个向前搜,一个向后找。 

这样做的好处是什么?

    我们不妨假设每次搜索的分支因子是r,如果最短的路径长为L的话(也就是搜了L层),那么,用一般的BFS算法(不考虑去掉重复状态),总的搜索状态数是r^L(^表示乘方运算);而

如果采取双向BFS算法,那么,从前往后搜,我们只需要搜索L/2层,从后往前搜,我们也只要搜L/2层,因此,搜索状态数是2*(r^(L/2)),比普通BFS就快了很多了。 

    双向BFS算法的实质还是BFS,只不过两边同时开始BFS而已。还是可以利用队列来实现:可以设置两个队列,一个用于向前的BFS,另一个用于向后的BFS,利用这两个队列,同时从前、

后开始层次遍历搜索树

技术图片

双向BFS

标签:算法   是什么   最短路径   表示   很多   状态   line   bfs   nbsp   

原文地址:https://www.cnblogs.com/DeNeRATe/p/12219539.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!