//定义变量:goods 货物
goods[].ID//每个货物的唯一标识ID号
goods[].spec//规格
goods[].stoveNumber//炉号
goods[].weight//重
goods[].Ok//货物装完毕
理解每个货物的重量不可能大于箱子的最大承重量
//ark 箱子
ark[].weight
ark[].ID
//以上须构造两个类分别是goods 货物和ark 箱子来实现其属性(省略)
//ark 总数为20
ArrayList ark[] = new ArrayList[20];//定义每个箱子里装的货物
for(int i=0;i<20;i++)//依次装箱子
{
//每个箱子的第一个货物
//假定装到第m个货物
ark.additem(goods[m]);
spec=goods[m].spec;
goods[m].Ok=true;
ark.weight= goods[m].weight;
boolean unsuncess=true;
while(unsuccess)//直道成功跳出
{
//假设规格优先于炉号装箱
//假设货物总量有限为gross个
//spec_flage确定是否存在此规格
boolean spec_flage = false;
spec_flage
//规格
for(int j=0;j<gross;j++)
{
if(goods[j].Ok==false&&
goos[j].spec=spec)
{
spec_flage = true;
int weight =ark.weigh;
weight+=goods[j].weight;
if(weigh<20)
{
ark.additem(goods[j]);
goods[j].Ok=true;
ark.weight+= goods[j].weight;
}
}
}
//炉号
for(int j=0;j<gross;j++)
{
if(goods[j].Ok==false&&
goos[j].spec=spec)
{
spec_flage = true;
int weight =ark.weigh;
weight+=goods[j].weight;
if(weigh<20){
ark.additem(goods[j]);
goods[j].Ok=true;
ark.weight+= goods[j].weight;
//注意产生了新的规格
spec= goods[j].spec;
//可能还需要下次检索条件变为规格
//所以上面的规格方法最好是个单独的方法写在外面
//方便调用
//细节需仔细研究,提供个思想
}
}
}
//可能只有几个货物的物品然而箱子的总载重量还有富余,
//能装其他不同的货物
//这时多种规格,多种炉号,较复杂
function()//(略)
{
//调用表决函数,来选去最有组合(略)
}
}
}
//规格表决思想,程序省略
此部分程序用于判断当前箱能的所有物品不同规格总数的排序
从最多的到最少的
返回spec[sum]
spec[0]是最多的规格,sum是当前货物的总数
//炉号表决思想,程序省略
此部分程序用于判断当前箱能的所有物品不同炉号总数的排序
从最多的到最少的
返回stoveNumber[sum]
stoveNumber[0]是最多的炉号,sum是当前货物的总数
//***********************//
//提供个大体思路,可能不够详细,写详细了看来也不容易啊,
//可以优化很多,在程序上,如排序,算法等
//注意标志为的设定等
//***********************//