dfs:搜尋和遍歷演算法:訪問v(走了這一步後發生了什麼),對所有鄰接v的沒訪問過的u遞迴呼叫dfs(u)
圖的表示:鄰接矩陣o(n2):簡單,鄰接表o(n+e):適合邊少的圖
城堡問題:用遍歷演算法染色。圖已經包含在城堡陣列中,不需要額外表示
踩方格:受步數n控制的dfs,因為是求所有路徑而不是簡單的遍歷所以在回退時要把訪問標記清空。
例題:7-1紅與黑:應用dfs,開陣列check記錄是否被訪問過,圖的邊資訊隱含在題目陣列中
7-2馬踏棋盤:記錄路徑深度,按最優的方式處理相鄰接的點,記錄具體路徑時要注意回退錯誤的嘗試
7-3棋盤問題:按行遞增嘗試的方法可以避免重複路徑,
小結:dfs的關鍵就是找到題目隱含的圖中相鄰結點且用最合適的順序去遍歷他們。當要求路徑的長度時,需要用深度k來控制。同時dfs可以用bool返回值來判斷可行性,用int來返回可能的路徑數量。當處理所有路徑問題時一定要注意返回前要將狀態恢復。當處理從任一點開始的dfs時,要對每個點做一次以其為起點的dfs(如果路徑與順序無關則要避免重複計算)。
剪枝:可行性剪枝到達不到終點,最優性剪枝必然不是最優解
尋路問題:1放棄大於目前最優解的路徑2記錄中間結果的減枝:到達相同點如果剩餘的錢也相同,那麼長的那條可以剪枝
生日蛋糕:抽象成搜素問題,由題目條件多次剪枝
佐助和名人:類似尋路問題記錄中間狀態剪枝
基礎演算法 DFS
注 dfs演算法應用場景 1.遍歷樹 圖等資料結構。2.一些動態規劃問題,例如最優子串行問題。dfs演算法的運用 dfs演算法實現的方式有多種 棧 遞迴.用的最多的就是遞迴的方式。遞迴函式的一般組成 遞迴邊界和遞迴式,遇到邊界開始回溯。例子 揹包問題 給定 n 件物品 編號0 n 1 和乙個容量為 ...
演算法基礎 DFS(深度優先遍歷)
brycezou 163.com dfs的基本思想 從圖的某個頂點開始,一路向前,當沒有 新的 未被訪問的 頂點可訪問時逐層回退,繼續去發現新的頂點 直到源點可達的所有頂點都被訪問為止。這一過程類似於樹的前序遍歷。本文基於圖的鄰接表形式,分別給出了遞迴版本和非遞迴版本的dfs演算法 本 旨在清晰地展...
DFS基礎教學
很多人聽到這個 dfs 可能會頭暈眼花。這個演算法聽起來很難,其實並沒有大家想象中的一樣,它反而更容易理解一些。只要有乙個自定義函式的基礎,就一定能學會。深度優先搜尋,顧名思義,就是進行深度的搜尋。去尋找乙個終點。對於官方的解釋呢,是這樣的 dfs depth first search 深度優先搜尋...