《演算法筆記》深度優先搜尋DFS

2021-10-17 19:01:20 字數 1199 閱讀 7766

問題:

有n件物品,每件重量為w[i],價值為c[i],放進容量為v的揹包中。

問:能放進揹包的物品的最大價值?

分析:

1.每件物品:選、不選,兩種狀態(迷宮的岔道口)

2.超過v,邊界(迷宮的死胡同)

3.到達邊界,返回最近的岔道口

4.dfs需要記錄:

5.兩種轉移狀態

dfs(index+1,sumw+w[index],sumc+c[i])

dfs(index+1,sumw,sumc)

6.結束:index增長到n,此時的sumw、sumc為最終的,sumw不超過v就去比較sumc與之前最大的值
#includeconst int maxn=10010;

int n,v,maxvalue=0;//n代表物品件數,揹包重量v,最大價值maxvalue

int w[maxn],c[maxn];//w[i]是每件物品的重量,c[i]是每件物品的價值

//dfs,index是當前處理的物品編號

//sumw和sunc分別是當前物品的總重量和總價值

void dfs(int index,int sumw,int sumc)

return;

} dfs(index+1,sumw,sumc);//不選第index件物品

dfs(index+1,sumw+w[index],sumc+c[index]);//選第index件物品

} int main()

for(int i=0;idfs(0,0,0);//初始時第0件物品、當前總價值和總重量均為0

printf("%d\n",maxvalue);

return 0;

}

演算法筆記 深度優先搜尋 DFS

深度優先搜尋 depth first search,簡稱深搜 是一種極其常用的演算法,簡單來說,符合以下策略的就可以稱為深度優先搜尋。在圖中行走,沒有走過的點稱為 新點 所有走過的點稱為 舊點 開始時所有的點都是新點,從任意節點1出發,走向任意乙個新節點,同時將新節點標記為舊節點,然後重複此步驟。如...

演算法筆記之深度優先搜尋 DFS

由於各種筆試 面試都有演算法程式設計題,總感覺對於演算法和資料結構比較心虛。最近開始刷一些演算法題,複習一下資料結構以及演算法的相關知識。過程中記錄一下知識點,聊勝於無。兩個問題如下 一共有10塊積木,每個積木上有乙個數字,0 9。搭積木規則 每個積木放到其它兩個積木的上面,並且一定比下面的兩個積木...

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

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