用C语言实现背包问题求解。

2024-12-29 11:44:51
推荐回答(1个)
回答1:

#include
#define OK 1
#define ERROR 0
#define SElemtype int
#define STACKSIZE 100
typedef struct{
SElemtype data[STACKSIZE];
int top;
} SqStack;SElemtype Initstack(SqStack &s)//初始化栈。
{
s.top=0;
return OK;
}SElemtype Push(SqStack &s,SElemtype e)//入栈。
{
s.data[s.top++]=e;
return OK;
} void main()
{
int i,n,totalvol,w[STACKSIZE],sum=0,j=0;
SqStack s;
Initstack(s);
printf("请输入背包能装入的总体积:");
scanf("%d",&totalvol);
printf("请输入物品件数:");
scanf("%d",&n);
printf("请输入每件物品的体积:");
for(i=0;i scanf("%d",&w[i]);
while(s.top!=-1)
{ if(sum+w[j]<=totalvol)
{
Push(s,j);
sum+=w[j];
} if(sum==totalvol) //找到一组,退栈顶,找下一组。
{
for(i=0;i printf("%d ",w[s.data[i]]);
printf("\n"); s.top--;
sum-=w[s.data[s.top]];
j=s.data[s.top]+1;
} else
j++;
while(j==n) //遍历后仍未找到,则退栈。
{
s.top--;
sum-=w[s.data[s.top]];
j=s.data[s.top]+1;
}

}}