1. 程式人生 > >[演算法]簡單的揹包問題遞迴解法,C語言實現

[演算法]簡單的揹包問題遞迴解法,C語言實現

今天講點簡單的演算法,最簡單的揹包0演算法,使用了遞迴的方法,相信看完程式碼的朋友會發現這段程式碼很熟悉,不過CG提供這些程式碼的目的只是讓全部揹包演算法的完整提供地給大家,程式碼很簡單,相信高手一看就懂,這裡的揹包演算法只是考慮了物品的重量,沒有考慮物品的價值,是初學遞迴演算法的朋友必看的程式碼,高手的話全當複習一下吧。

因為CG最近要考試了,一口氣要考6門,所以部落格更新沒有這麼快了,請大家見諒不過我還是會保持每天提供至少一篇的速度寫博文,希望大家能支援,謝謝

預告下明天的演算法博文,《銀行家演算法》,今天覆習了下作業系統,晚上重新安裝了系統,浪費了兩個小時,程式碼明天除錯後奉上,希望大家繼續關注。







/*簡單的揹包問題遞迴解

*code CG 2009-01-04

*/

#include"stdio.h"

#define N 6 /*物品數量*/

#define S 15 /*揹包大小*/



int W[N+1]={0,1,2,3,4,5,6};/*測試資料,各物品重量,W[0]不使用*/



/*knapsack()揹包函式

引數 int s 剩餘重量

int n 剩餘物品數

返回 int 揹包分配是否成功

*/

int knapsack(int s,int n){

if(s == 0)/*分配結束,成功*/

return 1;

if(s < 0 s > 0 && n < 1 br>
return 0;

if( knapsack(s - W[n] , n - 1)){/*遞迴*/

printf("%-4d",W[n]); /*輸出*/

return 1;

}

return knapsack(s , n - 1);

}

int main()

{

if(knapsack(S , N))/*遞迴呼叫*/

printf("nOK!n");

else

printf("Failed!");

return 1;

}/*main*/


--------------------------------------------------------------------------------------
- 版權宣告:
- 如在本頁面內無特別說明,本文內容均為[李大仁部落格]原創,本文版權歸[李大仁部落格]所有。
- 歡迎轉載,轉載請務必在文章頁面明顯位置提供原文連結並註明出處。歡迎您在轉載本文時保留本段宣告。
- 文章標題:[演算法]簡單的揹包0問題遞迴解法 C語言實現 附程式碼
- 獨立部落格:李大仁部落格
- 永久連結:http://www.lidaren.com/archives/285
--------------------------------------------------------------------------------------
以上內容由部落格自動釋出工具自動釋出,最終顯示內容和效果會與原文內容有所偏差,敬請諒解。