问题描述:
有一批集装箱要装上一艘载重量为C的轮船,要求在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。
算法分析:
采用重量轻者先装的贪心选择策略,可产生最优装载问题的最优解。
算法实现:
OptinalLoading.java
/*
* 最优装载
* 有一批集装箱要装上一艘载重量为C的轮船。
* 要求在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。
* 算法分析:
* 采用重量最轻者先装的贪心选择策略
*
* date: 2010/12/12
* auther:cm
*
*/
import java.util.Arrays;
public class OptinalLoading
{
private double c; //载重量
private LContainer[] loadC; //集装箱数组
private int count; //可装入总数
public OptinalLoading(double c, double[] w)
{
this.c = c;
this.loadC = new LContainer[w.length];
for (int i = 0; i < w.length; i++)
{
loadC[i] = new LContainer(w[i], i);
}
}
public void optinalLoading()
{
Arrays.sort(loadC);
double max = c;
double sum = 0.0;
for (int i = 0; i < loadC.length&&loadC[i].getW()<=max; i++)
{
loadC[i].setLoadFlag(true);
count++;
sum += loadC[i].getW();
max -= loadC[i].getW();
}
}
public LContainer[] getLoadC()
{
return loadC;
}
public int getCount()
{
return count;
}
public static void main(String[] args)
{
double c = 1000;
double[] w = {800, 1000, 1001, 200, 100, 400, 600, 50};
OptinalLoading opt = new OptinalLoading(c, w);
opt.optinalLoading();
int count = opt.getCount();
LContainer[] cc = opt.getLoadC();
System.out.println(count);
for (int i = 0; i < cc.length; i++)
{
if (cc[i].getLoadFlag())
{
System.out.print(cc[i].getId() + " ");
}
}
}
}
LContainer.java
//集装箱类
public class LContainer implements Comparable
{
private int id; //编号
private double w; //重量
private boolean loadFlag = false; //是否装船标识
public LContainer()
{
}
public LContainer(double w, int id)
{
this.id = id;
this.w = w;
}
public int compareTo(Object obj)
{
double ww = ((LContainer)obj).getW();
if (this.w > ww)
{
return 1;
}
else if (this.w < ww)
{
return -1;
}
else
{
return 0;
}
}
public void setId(int id)
{
this.id = id;
}
public int getId()
{
return id;
}
public void setW(double w)
{
this.w = w;
}
public double getW()
{
return w;
}
public void setLoadFlag(boolean loadFlag)
{
this.loadFlag = loadFlag;
}
public boolean getLoadFlag()
{
return loadFlag;
}
}
分享到:
相关推荐
最优装载问题——回溯法 最优装载问题——回溯法 最优装载问题——回溯法
问题描述 有一批集装箱要装上一艘载重量为c的轮船,其中集装箱i的重量为wi (1≤i≤n) 。 最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。
贪心法解决最优装载问题 输入 20 2000 125 89.5 142.8 65 298 100 150 86 88 42 55 16 129.6 238.6 45 110 217 168 180 80 输出 1888.9 18 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1
计算计算法设计与分析实验,最优装载问题 c++
背包最优装载问题C++源代码 输入文件为in.in 输出文件为out.out 输入文件自行编写 第一行为背包大小w与物品个数n 第二、三行分别为物品的价值与大小
最优装载问题 解决最优装载 算法分析与设计
最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。 编程任务: 对于给定的n个集装箱和轮船的载重量C,编程计算装入最多时的集装箱个数。 Input 输入由多组测试数据组成。 每组测试...
计算机算法分析第四章,背包问题最优装载问题证明等的以及讲义
贪心法最优装载问题,内涵代码,调试成功!
算法设计与分析用分支限界法解决最优装载问题,,,
最优装载问题 计算机算法 c/c++语言
C++实现的分支限界的最优装载问题 可以运行
最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。 Input 输入的第一个为测试样例的个数T( T ),接下来有T个测试样例。每个测试样例的第一行是一个整数n( n )和一个非负数C( C )...
最优装载问题(算法 代码),需要的朋友可以看看的,百利无一害是吧
基于贪心算法的最优装在你问题
贪心算法解最优装载问题
贪心算法之最优装载问题.doc
最优装载回溯法求解最优装载回溯法求解最优装载回溯法求解最优装载回溯法求解
大学本科计算机算法课程要求程序,C语言编写,最优装载
此压缩为工程的压缩包,但是程序是在VS2010弄的,用VS2010查看的时候需要自己新建解决方案。