深度優先搜尋思想
深度優先搜尋遍歷類似於樹的先序遍歷。假定給定圖g的初態是所有頂點均未被訪問過,在g中任選乙個頂點i作為遍歷的初始點,則深度優先搜尋遞迴呼叫包含以下操作:
(1)訪問搜尋到的未被訪問的鄰接點;
(2)將此頂點的visited陣列元素值置1;
(3)搜尋該頂點的未被訪問的鄰接點,若該鄰接點存在,則從此鄰接點開始進行同樣的訪問和搜尋。
深度優先搜尋
dfs可描述為: (
1)訪問v0
頂點; (2
)置visited[v
0]=1;
(3)搜尋
v0未被訪問的鄰接點w,
若存在鄰接點w,
則dfs(w)。
例項:
圖中可能存在迴路,且圖的任一頂點都可能與其它頂點相通,在訪問完某個頂點之後可能會沿著某些邊又回到了曾經訪問過的頂點。
為了避免重複訪問,可設定乙個標誌頂點是否被訪問過的輔助陣列visited
[ ],它的初始狀態為0,在圖的遍歷過程中,一旦某乙個頂點i
被訪問,就立即讓visited
[i
]為1,防止它被多次訪問。
下面來看幾個例項,運用深搜解題:
杭電acm2102a計畫解救公主問題
杭電acm1016素數圈問題
倒油問題
BFS 廣度優先遍歷搜尋解析
3.2 廣度優先搜尋 bfs 廣度優先搜尋思想 廣度優先搜尋遍歷類似於樹的按層次遍歷。對於無向連通圖,廣度優先搜尋是從圖的某個頂點v0出發,在訪問v0之後,依次搜尋訪問v0的各個未被訪問過的鄰接點w1,w2,然後順序搜尋訪問w1的各未被訪問過的鄰接點,w2的各未被訪問過的鄰接點,即從v0開始,由近至...
深度優先遍歷DFS
本文章 中的圖用鄰接矩陣來表示,所以演算法複雜度為o v 2 如果用鄰接表來表示,那麼演算法的複雜度為o v e dfs可用來判斷圖中是否有環,展現無向圖中的連通分支。通過dfs,形成乙個由多棵深度優先樹所組成的深度優先森林。將原先圖中的邊新增到該森林之後,可以將所有邊定義為以下四類 1.樹邊 森林...
深度優先遍歷(DFS)
深度優先搜尋是一種列舉所有完整路徑以遍歷所有情況的搜尋方法。使用遞迴可以很好的實現深度優先遍歷,因此,只能說遞迴是實現深度優先遍歷的一種實現方式。給定乙個序列,列舉這個序列所有的子串行 例如子串行包含,選擇最優子串行,使它的某個特徵是所有子串行中最優的。這個問題也就是從n個整數中,選擇k個數的所有方...