求分箱子算法 ( 积分: 100 )

  • 主题发起人 yindajun123
  • 开始时间
Y

yindajun123

Unregistered / Unconfirmed
GUEST, unregistred user!
各位富翁:
小弟的问题是以钢铁厂出口货物,炉号,规格不同,进行分箱,箱数预先已知,箱承重也已知,将货物分配到各箱中,要求尽量将炉号相同,规格相同的放入同一箱内。举例为:
规格A 炉号1 重为10
规格A 炉号1 重为3
规格A 炉号1 重为4
规格B 炉号1 重为11
规格C 炉号1 重为8
规格B 炉号2 重为6
规格C 炉号2 重为7
规格B 炉号2 重为4
规格C 炉号3 重为5
也就是在分箱时,在考虑箱子承重(假定承重20)时,尽量将同一规格,同一炉号放到一箱中
 
Y

yindajun123

Unregistered / Unconfirmed
GUEST, unregistred user!
各位富翁:
小弟的问题是以钢铁厂出口货物,炉号,规格不同,进行分箱,箱数预先已知,箱承重也已知,将货物分配到各箱中,要求尽量将炉号相同,规格相同的放入同一箱内。举例为:
规格A 炉号1 重为10
规格A 炉号1 重为3
规格A 炉号1 重为4
规格B 炉号1 重为11
规格C 炉号1 重为8
规格B 炉号2 重为6
规格C 炉号2 重为7
规格B 炉号2 重为4
规格C 炉号3 重为5
也就是在分箱时,在考虑箱子承重(假定承重20)时,尽量将同一规格,同一炉号放到一箱中
 
Y

yaoyuan^_^

Unregistered / Unconfirmed
GUEST, unregistred user!
//定义变量: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&amp;&amp;
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&amp;&amp;
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是当前货物的总数

//***********************//
//提供个大体思路,可能不够详细,写详细了看来也不容易啊,
//可以优化很多,在程序上,如排序,算法等
//注意标志为的设定等
//***********************//
 
Y

yindajun123

Unregistered / Unconfirmed
GUEST, unregistred user!
接受答案了.
 

Similar threads

S
回复
0
查看
711
SUNSTONE的Delphi笔记
S
S
回复
0
查看
601
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
895
SUNSTONE的Delphi笔记
S
顶部