演算法總結 DFS 深度優先搜尋

2022-08-22 04:03:16 字數 1087 閱讀 7126

目錄二、dfs的具體實現

三、剪枝

四、練習

1. 什麼是dfs

深度優先搜尋演算法,又稱dfs(depth first search)。dfs演算法是一種搜尋演算法,而搜尋演算法實質上是一種列舉,即借助計算機的高效能來有目的地列舉乙個問題的部分情況或這個問題的所有情況,進而求出問題的解的一種方法。

2. dfs的搜尋方式

根據演算法的名字,我們很容易知道dfs是按照深度優先的順序對所有的狀態進行搜尋的。

dfs演算法是遞迴演算法的一種。搜尋時沿著樹的深度遍歷樹的節點,並盡可能深地搜尋樹的分支(到葉子節點為止)。當節點v的所有邊都被訪問過時,搜尋將回溯到發現節點v的那條邊的起始節點。搜尋過程一直進行到已發現從源節點可達的所有節點全部被訪問為止。

搭建乙個dfs程式並不困難,真正值得我們注意的是dfs演算法的剪枝部分。dfs的剪枝方法因題而異,但歸類後大概分為5類。這一點我們稍後會提及。

這裡給出一般dfs的框架:

void dfs(type n)	//出口

if(可以剪枝) return; //剪枝

for(i:1~p)

}

剪枝分為以下5類:

1. 順序性剪枝

若一些題的搜尋順序對答案無影響,那麼搜尋順序的不同會導致搜尋樹形態的改變,優先搜尋分支較少的階段,此時能減少搜尋的規模。

2. 重複性剪枝

在搜尋的時候如果有多種方式可以到達乙個狀態,那麼我們只需要搜尋乙個分支就可以了。

3. 可行性剪枝

可行性剪枝是對搜尋正確性的乙個保證,當分支在遞迴邊界的時候回溯。

4. 最優性剪枝

5. 記憶化剪枝

記錄搜尋狀態的結果,當重複遍歷乙個狀態的時候就可以直接返回這個狀態的答案,避免重複的搜尋。

深度優先搜尋演算法 DFS 總結

這段時間做dfs的題目一直處於這樣乙個狀態 我知道這種型別的題 全遍歷問題,n皇后問題 用dfs求解,但是在 的實現上經常會遇到各種各樣的問題,完成乙個演算法十分的拖泥帶水,有時還需要跟著網上的 走一遍。我希望能有一種一勞永逸的思路來解決各種dfs問題,我有幸找到了一篇非常清晰地介紹dfs的通用解法...

深度優先搜尋DFS總結

dfs不易混亂的敲碼思路 int dfs int x,int step,int n 王道機試指南第二版,例題9.3 a knight s journey 題目大意 將士每天看著相同的黑白方塊感到越來越無聊並決定去世界各地旅行。騎士按照 日 子規則行走。騎士的世界就是他生活的棋盤。騎士生活在比普通8x...

深度優先搜尋演算法(DFS)

1.深度優先搜尋屬於圖的遍歷演算法的一種,英文縮寫為dfs即depth first search.其過程簡要來說是對每乙個可能的分支路徑深入到不能再深入為止,而且每個節點只能訪問一次。2.搜尋策略 深度優先遍歷圖的方法是,從圖中某頂點v出發 1 訪問頂點v 2 依次從v的未被訪問的鄰接點出發,對圖進...