现有四个物品重量依次为4、3、6、2,装入载重量为11的背包中:
#include <stdio.h>
int w[20],x[20],bestx[20];
//每个物品的重量、物品是否装入、最好的装入方案
int cw,bestw,n,C,R;
//已装入的重量、最优装入的总重量、有n个物品、背包载重量、背包剩余载重量
void back(int i)
{
if(i==n+1)
{
int j;
if(cw>bestw)//更新当前的最优解x[]
for(j=1;j<=n;j++)
{bestx[j]=x[j];bestw=cw;}
return ;
}
R-=w[i];//剩余物品重量之和
if(cw+w[i]<=C)//装入此号物品,往左搜索
{
x[i]=1;
cw+=w[i];
back(i+1);
cw-=w[i];
}
if(cw+R>bestw)//当前已装入的重量+剩余物品的重量 大于 最优重量,往右搜索
{
x[i]=0;
back(i+1);
}
R+=w[i];
}
void main()
{
int k;
w[1]=4;w[2]=3;w[3]=6;w[4]=2;
n=4;C=R=11;
back(1);
for(k=1;k<=n;k++)
if(bestx[k]==1)
printf("装入%d号物品\n",k);
printf("装入的'总价值'为:%d\n",bestw);
}
运行:
装入1号物品
装入2号物品
装入4号物品
装入的'总价值'为:9
Press any key to continue