在給定圖g=(v,e)和乙個特定的源頂點s的情況下,廣度優先搜尋棵發現從s可達的所有頂點,並計算s到這些可達頂點之間的最短邊數。
廣度優先樹,根為s,且包括所有s的可達頂點。樹中從s到v的路徑對應於圖g中從s到v的一條最短路徑,即包含最少邊數的路徑。對有向圖無向圖都適用。
如果u處於從根s到頂點v的路徑中,那麼u稱為v的祖先,v是u的後裔。
分析
每個頂點至多只進入佇列一次,至多只從佇列中出來一次。對了列操作所需的全部時間為o(v)。
總執行時間為o(v+e)。
最短路徑
定義從頂點s到v之間的最短路徑距離δ(s,v)為從s到v的任何路徑中最少的邊數。如果沒有通路則等於oo。
具有這一距離的路徑即為從s到v的最短路徑。
設g=(v,e)是乙個有向圖或無向圖,s∈v為g的任意乙個頂點,則對任意邊(u,v)∈v,有:δ(s,v)<=δ(s,u)+1。
設g=(v,e)是乙個有向圖或無向圖,並假設演算法bfs從g中某一給定源點s∈v開始執行。在執行終止時,對每個頂點v∈v,bfs所計算出來的d[v]的值滿足d[v]>=δ(s,v)。
假設在bfs的執行過程中將頂點vi和vj插入了佇列,且vi先於vj入隊。那麼,當vj入隊時,有d[vi]<=d[vj]。
設g=(v,e)是乙個有向圖或無向圖,並假設過程bfs從g上某個給定的源頂點s∈v開始執行。在執行過程中,bfs可以發現原頂點s可達的每乙個頂點v∈v。在執行終止時,對所有v∈v,都有d[v]=δ(s,v)。對任意從s可達的頂點v!=s,從s到v的最短路徑之一是從s到π(v)的最短路徑再加上邊(π[v],v)。
廣度優先樹
如果v_π由從s可達的頂點所構成,則前驅子圖g_π是一棵廣度優先樹,並且對於所有的v∈v_π,在g_π中都有唯一的從s到v的簡單路徑,該路徑也同樣是g中從s到v的一條最短路徑。
當過程bfs應用於某一有向圖或無向圖g=(v,e)時,同時要構造出π域,使得前驅子圖g_π=(v_π,e_π)是一棵廣度優先樹。
22.2-1 對圖示有向圖,當指定源點為3時,所得d和π值是什麼。略
22.2-2 當指定源頂點為u時執行廣度優先搜尋演算法,說明所得的d和π值是什麼。略
22.2-3 如果bfs的輸入圖是用鄰接矩陣表示的,且對該演算法加以修改以處理這種輸入圖表示,那麼該演算法的執行時間如何?
o(v^2)
22.2-4 試證明在廣度優先搜尋演算法中,賦給頂點u的值d[u]與頂點在鄰接表中的次序無關。說明bfs計算出來的廣度優先樹與鄰接表中的順序是有關的。
d[u]是最短路徑,是確定的值。
22.2-5 舉例說明,在有向圖g=(v,e)中,源頂點s∈v,且樹邊集合e_π滿足對每一頂點v∈v,圖(v,e_π)中從s到v的唯一路徑是g中的一條最短路徑;然而,不論在每個鄰接表中各頂點如何排列,都不能通過在g上執行bfs而產生邊集e_π。
22.2-6 n個選手,r對比賽,給出o(n+r)的演算法,使比賽在好選手與壞選手之間進行。
*22.2-7 樹=(v,e)的直徑定義為maxδ(u,v),即樹中所有最短路徑長度中的最大值。
隨便找乙個點x,搜尋距離它最遠的點y,再找距y最遠的點z。 o(v+e)
*22.2-8 設g=(v,e)是乙個連通的無向圖。請給出乙個o(v+e)時間的演算法,以計算圖g中的一條路徑,對於e中的每一條邊,該路徑都恰好在乙個方向上遍歷一次。迷宮如何找出路?
演算法導論 22 2 廣度優先搜尋
一,廣度優先搜尋的思想 訪問完所有結點後,我們可以知道從源結點s開始能到達哪些結點以及經過的路徑長度,以此生成乙個 廣度優先搜尋樹 s作為其根結點,其餘為s可以到達的結點v,s到v的距離為圖g中s到v的最短路徑長度。二,bfs演算法介紹 準備階段 我們有個圖g v,e 確定了乙個源結點s,為了記錄圖...
《演算法導論》筆記 第22章 總結與思考
a g 的根是g的掛接點,當且僅當在g 中該根頂點至少有兩個子女。b 設v是g 中的某一非根頂點,證明v是g的掛接點當且僅當v有乙個子頂點s,使得不存在從s或s的任何後裔頂點指向v的某個真祖先頂點的反向邊。c 設low v min d v d w d w 對v的後裔u,u,w 是反向邊 試說明對所有...
《演算法導論》筆記 第22章 22 3 深度優先搜尋
深度優先搜尋的先輩子圖形成了乙個由數棵深度優先樹組成的深度優先森林。時間戳每個頂點v有兩個時間戳 當頂點v第一次被發現時,記錄下第乙個時間戳d v 當結束檢查v的鄰接表時,記錄下第二個時間戳f v dfs的執行時間為 v e 深度優先搜尋的性質 括號結構 把發現頂點u用左括號表示,完成用右括號表示,...