今日c語言解決背包問題(c語言背包問題)

導讀大家好,小淋來為大家解答以上問題。c語言解決背包問題,c語言背包問題很多人還不知道,現在讓我們一起來看看吧!1、提問者在這個程序中使...

大家好,小淋來為大家解答以上問題。c語言解決背包問題,c語言背包問題很多人還不知道,現在讓我們一起來看看吧!

1、提問者在這個程序中使用了遞歸算法,但是邏輯上有個小bug,就是判斷n==0時,如果還有容量,那么應該返回第一項的權重,而不是0。可以通過改變容量C或項目參數來檢查算法的邏輯正確性。

2、關于所選項的輸出,我添加了一個數組來標記所選項。因為所有遞歸后只有最外層的標簽有效,所以使用for循環來完成每一層的標簽。下面是修改后的過程:

3、inta[5]={ 0 };

4、intMaxW(整數,整數,整數*體積,整數*重量)

5、{

6、intW=0,W1=0,W2=0;

7、如果(n==0)

8、{

9、if(C=Volunme[0])

10、{

11、a[0]=1;

12、returnW=1;

13、}

14、其他

15、return0

16、}

17、Elseif(C=Volunme[n])//背包剩余空間可以裝下物品n。

18、{

19、W1=MaxW(n-1,C-Volunme[n],Volunme,Weight)Weight[n];//放入n可以得到的重量。

20、W2=MaxW(n-1,C,體積,重量);//不放N可以得到的權重

21、W=(W1W2?w 1: w2);

22、a[n]=(W1W2?1:0);

23、}

24、Else//背包空間已經容不下N個了。回到放n-1的情況。

25、{

26、returnMaxW(n-1,C,Volunme,Weight);

27、}

28、returnW

29、}

30、intmain(void)

31、{

32、intn=5;intC=7;

33、intvolume[]={ 1,2,3,4,5 };

34、intWeight[]={1,2,5,7,8 };

35、Printf('最大重量為% d \ n ',maxw (n-1,c,volunme,weight));

36、for(inti=n-2;I=0;我-)

37、{

38、a[I]=0;

39、if(a[i 1]==1)

40、{

41、c-=Volunme[I 1];

42、權重[I 1]=0;

43、}

44、MaxW(i,C,Volunme,Weight);

45、}

46、Printf('所選項目編號為:');

47、for(inti=0;i5;我)

48、{

49、if(a[i]==1)

50、printf('#%d ',I 1);

51、}

52、printf(' \ n ');

53、return0

54、}

本文到此結束,希望對大家有所幫助。

免責聲明:本文由用戶上傳,如有侵權請聯系刪除!