首页 > 综合 >

数据结构 背包问题

发布时间:2024-07-27 04:20:06来源:
导读 【#数据结构 背包问题#】1、#include2、#define N 63、int main(){4、未经芝段士回答允许还不得转出载本文内容,否那则将视许为侵权5、...
【#数据结构 背包问题#】

1、#include

2、#define N 6

3、int main(){

4、未经芝段士回答允许还不得转出载本文内容,否那则将视许为侵权

5、//从N个背包(每个背包中w[k])中选取总重为T的背包,共有多少种选法

6、int w[N]={1,8,3,4,5,2}; //6个背包

7、int T=10; //总重

8、发十着当公路较将先保证且半片火满引。

9、int k=0;

10、int i=0;

11、int j=1;

12、分理并文百改空今断效斯圆严。

13、struct stacks{ //栈

14、int s[N];

15、int top;

16、} the_stack;

17、//初始化栈

18、for(i=0;i

19、the_stack.top=0;

20、do{

21、while(T>0&&k<=N){

22、if(T>=w[k]){ //符合条件的背包进栈

23、the_stack.s[the_stack.top++]=k;

24、T-=w[k];

25、}

26、k++; //不符合则考察下一个背包

27、}

28、if(T==0){ //找到一种方法,输出

29、printf("------------Answer%d------------\n",j);

30、for(i=0;i

31、printf("%d[%d] ",the_stack.s[i],w[the_stack.s[i]]);

32、}

33、j++;

34、printf("\n");

35、}

36、k=the_stack.s[--the_stack.top]; //找不到方法,则前一个入栈的背包出栈,继续考察下一个背包

37、the_stack.s[the_stack.top]=0;

38、T+=w[k];

39、k++;

40、}while(!(the_stack.top==0&&k==N)); //当栈空且k==N时,所有可能的组合都考察完毕,推出循环

41、}

42、运行结果:

43、------------Answer1------------

44、0[1] 2[3] 3[4] 5[2]

45、------------Answer2------------

46、0[1] 3[4] 4[5]

47、------------Answer3------------

48、1[8] 5[2]

49、------------Answer4------------

50、2[3] 4[5] 5[2]

【#数据结构 背包问题#】到此分享完毕,希望对大家有所帮助。

版权声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。