深度優先搜索
時間復雜度 領接矩陣表示 O( n2) 領接表表示 O(n+e)
空間復雜度 O(e)
DFS與回溯法類似,一條路徑走到底后需要返回上一步,搜索第二條路徑。在樹的遍歷中,首先一直訪問到最深的節點,然后回溯到它的父節點,遍歷另一條路徑,直到遍歷完所有節點。
利用拓撲排序表可以方便的解決很多相關的圖論問題,如最大路徑問題等等。一般用棧數據結構來輔助實現DFS算法。根據深度優先搜索的特點,采用遞歸函數實現比較簡單。
遞歸與棧
廣度優先搜索
時間復雜度 領接矩陣表示O( e2 ) 領接表表示 O(n+e)
先訪問完當前頂點的所有鄰接點,然后再訪問下一層的所有節點,該算法適用于解決最短、最小路徑等問題,但是構建廣度優先算法需要維護自己的隊列。
第一步:遍歷圖中所有的頂點,將入度為0的頂點 入隊列。
第二步:從隊列中出一個頂點,打印頂點,更新該頂點的鄰接點的入度(減1),如果鄰接點的入度減1之后變成了0,則將該鄰接點入隊列。
第三步:一直執行上面 第二步,直到隊列為空。