背包问题C++程序设计

2025-03-29 07:32:00
推荐回答(3个)
回答1:

1.就二十分就让别人帮你做作业了?!
2。自己作业需要自己完成,况且这个程序并不怎么难,自己在想想!!

回答2:

这是什么作业,居然用遗传算法!
不过这样你也不用考虑什么算法了,遗传算法写出来代码可能长一点,但是思想确很简单的,一周的时间还是很充足的.

PS:你加到2000分说不定我就会帮你了,嘿嘿~~~~

回答3:

程序我帮你写完了,看看行不行!什么问题可以问我,在我有时间的前提下,一定会帮你写的!
#include
#include
typedef struct bag
{
int io_bag[20];//物品是否装入的信息//
long sumhev_bag;//总重//
long sumval_bag;//总价值//
}bag;
void random(long,long,int a[]); //用于生成随机的数//
long sum(int sum[]); //用于算和//
long in_sum(int sum[],int io[]); //用于算装入包的总重和总价值//
int if_putin(long,long); //用于判断是否超重//
void line(bag a[]); //用于排列//
void change(bag a,bag b,int i); //用于交换判断数//
void jiaocha(bag a,bag b); //用于重新装包//
int goods_hev[20],goods_val[20];
void main()
{
bag real_bag[50];
int io_putin[20];
long hev_big,sumhev_in,sumval_in;;
int n=0 ;
random(1000,100,goods_hev);
random(100,10,goods_val);
hev_big=(2.0/3.0)*sum(goods_hev)+1;
for(long i=0;;i++)
{
random(1,0,io_putin);
sumhev_in=in_sum(goods_hev,io_putin);
sumval_in=in_sum(goods_val,io_putin);
if(if_putin(sumhev_in,hev_big))
{
real_bag[n].sumhev_bag=sumhev_in;
real_bag[n].sumval_bag=sumval_in;
for(int j=0;j<20;j++)
real_bag[n].io_bag[j]=io_putin[j];
n++;
}
if(n==50) break;
}
line(real_bag);
for(int k=0;k<200;k++)
{
for(int j=0;j<50;j=j+2)
{
jiaocha(real_bag[i],real_bag[i+1]);
if(!if_putin(real_bag[i].sumhev_bag,hev_big)||!if_putin(real_bag[i+1].sumhev_bag,hev_big))
jiaocha(real_bag[i],real_bag[i+1]);
}
line(real_bag);
}
cout<<"物重分别为:";
for(i=0;i<20;i++)cout<<" "< cout< cout<<"物值分别为:";
for(i=0;i<20;i++)cout<<" "< cout< cout<<"最好的装包方法为:"< cout<<"把以下号的物品装入包中:"< for(i=0;i<20;i++)
{
if(real_bag[0].io_bag[i]!=0)
cout< }
cout< cout<<"总重量为:"< cout<<"总价值为:"<}
//以下为调用函数,都是干什么用的看前面说明//
int if_putin(long sum,long sumhev)
{
if(sum return 1;
else return 0;
}
long in_sum(int sum[],int io[])
{
long in_sum1=0;
for(int i=0;i<20;i++)if(io[i]==1)in_sum1+=sum[i];
return in_sum1;
}
long sum(int sum2[])
{
long sum1=0;
for(int i=0;i<20;i++)sum1+=sum2[i];
return sum1;
}
void random(long max,long min,int a[])
{
for(int i=0;i<20;i++)
a[i]=(rand()%(max-min+1)+min);
}
void line(bag a[])
{
bag temp;
for(int i=0;i<50;i++)
for(int j=i;j<50;j++)
if(a[i].sumval_bag {
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
void change(bag a,bag b,int i)
{
int temp_io;
for(int j=i+1;j<20;j++)
{
temp_io=a.io_bag[i];
a.io_bag[i]=b.io_bag[i];
b.io_bag[i]=temp_io;
}
}
void jiaocha(bag a,bag b)
{
int n;
n=rand()%(8-1+1)+1;
change(a,b,n);
in_sum(goods_hev,a.io_bag);
in_sum(goods_val,a.io_bag);
in_sum(goods_hev,b.io_bag);
in_sum(goods_val,b.io_bag);
}