数据结构 背包问题
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]
【#数据结构 背包问题#】到此分享完毕,希望对大家有所帮助。
版权声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。