在Dijkstra算法中,面對單源單目標的最短路徑,若是遇到了要relax的節點u就是目標節點t,顯然就能夠執行結束了。算法
Dijkstra算法post
Dijkstra算法的探索路徑是從源一直往目標前景,那麼加速它的一個角度就是從源開始探索的時候,同時從目標點向源開始探索,這種算法即Bi-Directional Search。.net
具體操做位,從源點和從目標兩個方向均開始搜索,輪流的執行。兩個方向的搜索意味着,在初始化的時候將有兩個路徑值::向前搜索最短路徑、
向後搜索最短路徑;兩個最小優先級隊列
、
;對應的前一個節點指向
、
;以及
、
3d
- 向前搜索:沿着源點向目標搜索
- 向後搜索:沿着目標向源點搜索
對於選出的頂點u,當他'同時'被前向搜索和後向搜索處理完成,或者說是‘同時’從、
中刪除了,此時能夠結束。指針
可能想到的思路是,若是u是第一個知足結束條件的,那麼沿着各自的前向指針,便可找到最短路徑。以以下搜索爲例:code
向前搜索
:從源點出發,使用Dijkstra算法,能夠計算出
向後搜索
:從目標出發,使用Dijkstra算法,能夠計算出
向前搜索
:從中移除的最小值爲
=3,執行邊(a,b)的Relax操做,可獲得
={u(5),b(6),t(
)},
={s(0),a(3)}cdn
向後搜索
:從
向前搜索
:從中移除的最小值爲
=5,執行邊(u,t)的Relax操做,可獲得
={b(6),t(10)},
={s(0),a(3),u(5)}blog
向後搜索
:從
另外一種算法爲Goal-Directed Search ,詳見 www.researchgate.net/publication…隊列
算法導論(MIT 6.006 第18講)get