双向BFS

Posted roni-i

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了双向BFS相关的知识,希望对你有一定的参考价值。

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

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

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

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

以上是关于双向BFS的主要内容,如果未能解决你的问题,请参考以下文章

HDU3085nightmare2 双向BFS

双向BFS

POJ1915Knight Moves(单向BFS + 双向BFS)

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

Knight Moves (双向bfs)

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