#include <stdio.h>
#define size 20
struct stacks
{
int data[size];
int top;
}stack;void main()
{
int w[size];
int V;
int k=0;
int i=0;
int j=1;
int number;
int s=0;
printf("\n请输入可供选择装入物品的个数:");
scanf("%d",&number);
printf("\n请输入各件物品的体积:");
for(i=0;i<number;i++)
scanf("%d",&w[i]);
for(i=0;i<number;i++)
s=s+w[i];
printf("\n可供选择的物品的总体s=%d\n",s);
printf("\n请输入背包的总体积:");
scanf("%d",&V);
if(V<0||V>s)
printf("\n输入背包体积错误");
printf("\n");
for(i=0;i<number;i++)
stack.data[i]=0;
stack.top=0;
do
{
while(V>0&&k<=number)
{
if(V>=w[k])
{
stack.data[stack.top]=k;
stack.top++;
V-=w[k];
}
k++;
}
if(V==0)
{
printf("第%d个符合条件的解:",j);
for(i=0;i<stack.top;i++)
{
printf("%d ",w[stack.data[i]]);
}
j++;
printf("\n");
}
k=stack.data[--stack.top];
stack.data[stack.top]=0;
V+=w[k];
k++;
}while(!(stack.top==0&&k==number));}
|