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

双向BFS

时间:2018-07-15 00:13:45      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:目标   就是   一个   起点   圆心   状态   优化方法   优化   适用于   

我们知道,BFS是往广处去搜索,我们把这想象成一个以起点为圆心的一个圆,每向前走一步,就是圆的半径增大一个单位,而圆的每个单位面积上是一种状态,当圆增大到目标点那么大时,找到了答案,搜索结束。那么显然的,当半径较大时,每走一步就会有十分大量的状态需要来储存( S=πr2 )。通常的,我们用“判重”的方法来解决,但是在这里,还有一种优化方法:双向搜索。

双向搜索适用于起点和终点状态都很明确的搜索题。试想,我从起点推算到终点,与我从终点推算到起点,最后得到的最少步骤数一定是相等的,所以我们可以从起点和终点同时搜索。同样用圆来打比方,假设以起点为圆心画圆时,最终半径为r,以终点为圆心画圆时,最终半径为R。那么显然有:

πr2+πR2≤π(r+R)2

所以当害怕BFS会TLE时,不妨打一打双向BFS。

双向BFS

标签:目标   就是   一个   起点   圆心   状态   优化方法   优化   适用于   

原文地址:https://www.cnblogs.com/Roni-i/p/9311347.html

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