注:
dfs演算法應用場景:
1.遍歷樹、圖等資料結構。
2.一些動態規劃問題,例如最優子串行問題。
dfs演算法的運用:
dfs演算法實現的方式有多種:棧、遞迴...用的最多的就是遞迴的方式。
遞迴函式的一般組成:遞迴邊界和遞迴式,遇到邊界開始回溯。
例子:揹包問題
給定 n 件物品(編號0—-n-1)和乙個容量為 v 的揹包,物品 i 的重量是 w[i],其價值為 v[i]。
問:應該如何選擇裝入揹包的物品,使得裝入揹包中的物品的總價值最大?請列印出你選擇物品的編號和最大價值!
解答:
#include#includeusing namespace std;
int const maxn=999999;
int maxvalue=0;
int n,v;
int w[maxn],v[maxn],temp_w=0,temp_v=0;
vectorans,temp;
void dfs(int index,int temp_w,int temp_v)
return;
}//遞迴式兩個:
//乙個不拿第index個東西,直接去處理第index+1個東西;
//另乙個拿第index個東西,所以去處理第index+1個東西時重量變為了temp_w+w[index],價值變為了temp_v+v[index]
temp.push_back(index);
dfs(index+1,temp_w+w[index],temp_v+v[index]);
temp.pop_back() ;
dfs(index+1,temp_w,temp_v);
} int main()
{ scanf("%d%d",&n,&v);
for(int i=0;i結果:
演算法基礎 dfs
dfs 搜尋和遍歷演算法 訪問v 走了這一步後發生了什麼 對所有鄰接v的沒訪問過的u遞迴呼叫dfs u 圖的表示 鄰接矩陣o n2 簡單,鄰接表o n e 適合邊少的圖 城堡問題 用遍歷演算法染色。圖已經包含在城堡陣列中,不需要額外表示 踩方格 受步數n控制的dfs,因為是求所有路徑而不是簡單的遍歷...
演算法基礎 DFS(深度優先遍歷)
brycezou 163.com dfs的基本思想 從圖的某個頂點開始,一路向前,當沒有 新的 未被訪問的 頂點可訪問時逐層回退,繼續去發現新的頂點 直到源點可達的所有頂點都被訪問為止。這一過程類似於樹的前序遍歷。本文基於圖的鄰接表形式,分別給出了遞迴版本和非遞迴版本的dfs演算法 本 旨在清晰地展...
DFS基礎教學
很多人聽到這個 dfs 可能會頭暈眼花。這個演算法聽起來很難,其實並沒有大家想象中的一樣,它反而更容易理解一些。只要有乙個自定義函式的基礎,就一定能學會。深度優先搜尋,顧名思義,就是進行深度的搜尋。去尋找乙個終點。對於官方的解釋呢,是這樣的 dfs depth first search 深度優先搜尋...