基礎演算法 DFS

2021-09-13 20:14:46 字數 1074 閱讀 7827

注:

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 深度優先搜尋...