# 算法导论示例-FastestWay（applet）

/**
* Introduction to Algorithms, Second Edition
* 15.1 Assembly-line scheduling
* @author 土豆爸爸
*
*/
import java.util.ArrayList;
import java.util.List;

public class FastestWay {
public static List<Station> findFastestWay(Assembly a1, Assembly a2) {
assert(a1.stations.size() == a2.stations.size()); //两个装配线长度相同
int n = a1.stations.size();
List<Station> way1 = new ArrayList<Station>(n);
List<Station> way2 = new ArrayList<Station>(n);
a1.stations.get(0).f = a1.e + a1.stations.get(0).a; //计算f(1,1)
a2.stations.get(0).f = a2.e + a2.stations.get(0).a; //计算f(2,1)

for(int j = 1; j < n; j++) {
Station s1 = a1.stations.get(j);    //第1条装配线第j个工位
Station s10 = a1.stations.get(j-1); //第1条装配线第j-1个工位
Station s2 = a2.stations.get(j);    //第2条装配线第j个工位
Station s20 = a2.stations.get(j-1); //第2条装配线第j-1个工位
int t11 = s10.f + s1.a;        //从第1条装配线的j-1工位到第1条装配线j工位所需要时间
int t21 = s20.f + s20.t + s1.a;//从第2条装配线的j-1工位到第1条装配线j工位所需要时间
int t22 = s20.f + s2.a;        //从第1条装配线的j-1工位到第1条装配线j工位所需要时间
int t12 = s10.f + s10.t + s2.a;//从第2条装配线的j-1工位到第1条装配线j工位所需要时间
if(t11 < t21) {
s1.f = t11;
} else {
s1.f = t21;
}

if(t22 < t12) {
s2.f = t22;
} else {
s2.f = t12;
}
}

//出口判断
Station last1 = a1.stations.get(n - 1);
Station last2 = a1.stations.get(n - 1);
if(last1.f + a1.x <= last2.f + a2.x) {
return way1;
} else {
return way2;
}
}
}

/**
* 装配线
*/
class Assembly {
public int e; //上线时间
public int x; //出线时间
public List<Station> stations;

public Assembly(int e, int x) {
this.e = e;
this.x = x;
}
}

/**
* 工位
*/
class Station {
public Assembly assembly;
public int a; //工作时间
public int t; //从上一工位到当前工位的转换时间
public int f; //到达当前工位最短时间
public Station(Assembly assembly, int a, int t) {
this.assembly = assembly;
this.a = a;
this.t = t;
}
}

import java.util.ArrayList;
import java.util.List;

import junit.framework.TestCase;

public class FastestWayTest extends TestCase {
public void testFastestWay() {
Assembly a1 = new Assembly(2, 3);
List<Station> s1 = new ArrayList<Station>();
s1.add(new Station(a1, 7, 2));
s1.add(new Station(a1, 9, 3));
s1.add(new Station(a1, 3, 1));
s1.add(new Station(a1, 4, 3));
s1.add(new Station(a1, 8, 4));
s1.add(new Station(a1, 4, 0));
a1.stations = s1;

Assembly a2 = new Assembly(4, 2);
List<Station> s2 = new ArrayList<Station>();
s2.add(new Station(a2, 8, 2));
s2.add(new Station(a2, 5, 1));
s2.add(new Station(a2, 6, 2));
s2.add(new Station(a2, 4, 2));
s2.add(new Station(a2, 5, 1));
s2.add(new Station(a2, 7, 0));
a2.stations = s2;

int[] answer = {7, 5, 3, 4, 5, 4};
List<Station> way = FastestWay.findFastestWay(a1, a2);

Station prev = way.get(0);
int sum = prev.assembly == a1 ? a1.e : a2.e;
for(int i = 0; i < way.size(); i++) {
Station station = way.get(i);
if(station.assembly == prev.assembly) {
sum += station.a;
} else {
sum += station.a + prev.t;
}
prev = station;
}
sum += prev.assembly == a1 ? a1.x : a2.x;
assertEquals(38, sum);
}
}

• 本文已收录于以下专栏：

## 一个关于Applet的例子，需要的可以参考一下！

import java.awt.*;import java.awt.event.*;import java.util.*;import java.applet.*;//public class Hua...
• sunant
• 2004年12月07日 20:42
• 1230

## java applet 一个简单的例子（applet+html)

java applet是一个类，其层次结构如下图：  类 JApplet  java.lang.Object    java.awt.Component        java.awt.Con...
• caomiao2006
• 2013年12月24日 21:02
• 17112

## 疯狂JAVA讲义---第十二章：Swing编程（四）Applet和JApplet

• terryzero
• 2009年01月15日 20:54
• 3800

## java applet 编写简单示例

java applet
• baohuan_love
• 2013年11月11日 15:26
• 1481

宿主机：Windows xp+VMware(Fedora core)目标机：ARM+uclinux2.6.x+nfs解决方法：arm-elf-gcc -o hello -elf2flt hello....
• terence427
• 2007年09月25日 10:28
• 2328

## 详解Java Servlet与Applet比较

• yasi_xi
• 2014年03月25日 16:16
• 2634

## java:Applet布局问题,如何添加按钮，标签问题总结

• kang89
• 2010年04月24日 00:32
• 5326

## Java_Applet深入理解

• llwan
• 2016年02月02日 11:24
• 2634

## Eclipse开发Applet的流程

﻿﻿ Java Applet 是用Java 语言编写的一些小应用程序，这些程序是直接嵌入到网页中，这里采用Eclipse编写和调试Applet程序，调试的时候Eclipse会自动调用Java "小程...
• u012868627
• 2014年09月06日 19:23
• 1721

## Java 的安装和Java Applet在浏览器中的使用

Java环境安装教程：http://www.runoob.com/java/java-environment-setup.html 作为开发者只需要安装JDK即可，JDK中包含了JRE。 比较麻烦...
• jsgaobiao
• 2015年11月14日 13:40
• 2221

举报原因： 您举报文章：算法导论示例-FastestWay（applet） 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)