#include<stdio.h>
int sum;
//int i;//包裹的序号
int a[11] = {6,7,2,5,1,9,12,25,1,4};
int no[11];
int p = 0;
int base = 0;
int top = -1;
void P(int n, int s, int i){
int j;
sum = sum + a[i];
no[++top] = i;
for(j = i; j < n; j++){
//printf("no.%d sum is%d\n", j, sum);
if(sum > s){
return;
} else if(sum == s){
printf("%d\n", j);
while(1){
if(p != top){
printf("第%d个 重量为%d\n", no[p], a[no[p]]);
++p;
} else{
printf("第%d个 重量为%d\n", no[p], a[no[p]]);
p = base;
break;
}
}
printf("\n");
return;
} else{
P(n, s, j + 1);
sum = sum - a[j + 1];
no[top] = 0;
--top;
//printf("after j is%d sum is%d\n", j, sum);
}
}
}
int main(){
for(int i = 0; i < 10; i++){
P(10, 14, i);
sum = 0;
top = -1;
p = 0;
}
return 0;
}
背包问题(递归回溯法)
最新推荐文章于 2024-11-28 15:28:13 发布
本文介绍了如何使用递归回溯法解决经典的背包问题。通过实例详细解析了算法的实现过程,探讨了该方法在面对不同约束条件下的应用,并讨论了其与动态规划的比较。
1万+

被折叠的 条评论
为什么被折叠?



