程序我帮你写完了,看看行不行!什么问题可以问我,在我有时间的前提下,一定会帮你写的!
#include<iostreamh>
#include<stdlibh>
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=(20/30)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<<" "<<goods_hev[i]<<" ";
cout<<endl;
cout<<"物值分别为:";
for(i=0;i<20;i++)cout<<" "<<goods_val[i]<<" ";
cout<<endl;
cout<<"最好的装包方法为:"<<endl;
cout<<"把以下号的物品装入包中:"<<endl;
for(i=0;i<20;i++)
{
if(real_bag[0]io_bag[i]!=0)
cout<<i+1<<";";
}
cout<<endl;
cout<<"总重量为:"<<real_bag[0]sumhev_bag<<endl;
cout<<"总价值为:"<<real_bag[0]sumval_bag<<endl;
}
//以下为调用函数,都是干什么用的看前面说明//
int if_putin(long sum,long sumhev)
{
if(sum<sumhev)
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<a[j]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=aio_bag[i];
aio_bag[i]=bio_bag[i];
bio_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,aio_bag);
in_sum(goods_val,aio_bag);
in_sum(goods_hev,bio_bag);
in_sum(goods_val,bio_bag);
}
以上就是关于背包问题C++程序设计全部的内容,包括:背包问题C++程序设计、、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)