//深搜遍歷從起點出發能走的所有節點
//對於乙個節點,只要發現了沒走過的點就走到它,如果有多個點可走就任選乙個(遞迴呼叫)
//由於是從起點開始遍歷,因此遍歷過程也是產生路徑的過程 ,因此深搜遍歷是有路徑資訊的 ,單純的根據資料結構遍歷所有點是沒有路徑資訊的
dfs(v)
//深搜遍歷圖上所有節點,注意區分僅僅呼叫dfs(v)
while
(能找到新節點k)
//深搜尋找從起點v到終點的最優路徑
dfs(v)
}
若將深搜理解為擴充套件路徑的一種遞迴演算法,則可以從分解子問題遞迴的角度來理解
甚至可以將深搜理解為在遞迴的狀態圖,這個圖上進行深搜。這樣的話,我們可以用dfs這種搜尋方法去寫遞迴函式。
dfs也是遞迴,因此dfs也可以用動態規劃,比如用乙個陣列存某個點的最優路徑, 之後再走到這個點時就不用再運算了
深搜尋路時如何更快找到路徑,簡單點的理解可以看我的部落格鳴人和佐助(老婆)
網路尋路 深搜
問題描述 x 國的乙個網路使用若干條線路連線若干個節點。節點間的通訊是雙向的。某重要資料報,為了安全起見,必須恰好被 兩次到達目的地。該包可能在任意乙個節點產生,我們需要知道該網路中一共有多少種不同的 路徑。源位址和目標位址可以相同,但中間節點必須不同。如下圖所示的網路。1 2 3 1 是允許的 1...
dfs 深搜 模板
關於深度優先搜尋的效率問題,有多種解決方法。最具有通用性的是剪枝 prunning 也就是去除沒有用的搜尋分支。有可行性剪枝和最優性剪枝兩種。int mx 4 向上下左右四個方向移動 0,1 0,1 1,0 1,0 int my 4 bool check int x,int y 判斷是否滿足條件的子...
深搜(2) 尋路 蛋糕
include include include include using namespace std struct rode int minlen 1 30,tallen,talcost 當前最優路徑長度,正在走的路的長度,花銷 vector cityway 105 cityway i 是從i有路...