//采用重量最轻者先装的贪心选择策略
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <iostream.h>
struct weight1
{
int w;
int i;
}weight[10];
struct copy
{
int number;
int w;
}copy[10];
float loading(int cu,int x[],int n)
{
int i,t;
int *b=new int[n];
int *c=new int[n];
for(i=0;i<n;i++)
{
cout<<"请输入第"<<i+1<<"个集装箱的重量"<<endl;
cin>>weight[i].w;
weight[i].i=i;
}
for(i=0;i<n;i++) //排序前的备份
{
copy[i].number=weight[i].i;
copy[i].w=weight[i].w;
}
for(i=0;i<n-1;i++) //冒泡排序
{
for (int d=i+1;d<n;d++)
if(weight[i].w>weight[d].w)
{
t=weight[i].w;
weight[i].w=weight[d].w;
weight[d].w=t;
}
}
float op=0.0;
for(i=0;i<n;i++) //初始化
x[i]=0;
for(i=0;i<n&&weight[i].w<=cu;i++)
{
for(int j=0;j<n;j++)
{
if(copy[j].w==weight[i].w)
weight[i].i=copy[j].number;
}
x[weight[i].i]=1;
op+=weight[i].w;
cu-=weight[i].w;
}
return op; //装载的总重量
}
void main()
{
int n;
int cu;
cout<<"\t\t\t贪心算法解最优装载问题"<<endl;
cout<<"请输入货物的数量:"<<endl;
cin>>n;
int *x=new int[n];
cout<<"请输入最大装载量M:"<<endl;
cin>>cu;
cout<<"最多可装的货物重量为:"<<loading(cu,x,n)<<endl;
cout<<"最优序列为:";
for(int i=0;i<n;i++)
cout<<x[i]<<" ";
cout<<endl;
}