ScropJr1 发表于 2015-3-28 10:59:26

求教C语言背包问题做法

假设有一个能装入总体积为T的背包和n件体积分别为w1 , w2 , … , wn 的物品,能否从n件物品中挑选若干件恰好装满背包,即使w1 +w2 + … + wn=T,要求找出所有满足上述条件的解。例如:当T=10,各件物品的体积{1,8,4,3,5,2}时,可找到下列4组解:(1,4,3,2)(1,4,5)(8,2)(3,5,2)。
求C语言思路...

秀丽江山 发表于 2015-3-28 14:32:44

你说的什么东西。。。你自己看得懂吗

ANDES 发表于 2015-3-28 17:00:26


#include <stdio.h>
#define size 20
struct stacks
{
int data;
int top;
}stack;void main()
{
int w;
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);
for(i=0;i<number;i++)
s=s+w;
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=0;
stack.top=0;
do
{
while(V>0&&k<=number)
{
if(V>=w)
{
stack.data=k;
stack.top++;
V-=w;
}
k++;
}
if(V==0)
{
printf("第%d个符合条件的解:",j);
for(i=0;i<stack.top;i++)
{
printf("%d ",w]);
}
j++;
printf("\n");
}
k=stack.data[--stack.top];
stack.data=0;
V+=w;
k++;
}while(!(stack.top==0&&k==number));}
页: [1]
查看完整版本: 求教C语言背包问题做法