5-25 双轨车皮编序问题
问题描述
在一个列车调度站中,2 条轨道连接到 2 条侧轨处,形成 2 个铁路转轨栈。其中左边轨道为车皮入口,编号为 A;右边轨道为出口,编号为 D,2 个铁路转轨栈分别编号为 C 和 D, 如下图所示。编号为 a,b,…,的 n 个车皮依序停放在车皮入口处。调度室要安排各车皮 进出栈次序,使得在出口处各车皮按照预先指定的顺序依次出站。车皮移动时只能按照从左 到右的方向移动。
给定车皮数 n,以及各车皮的出站顺序,编程计算最优调度方案,使得移动车皮的总次 数最少。
数据输入:
第一行有 1 个正整数 n,表示车皮数。接下来的 1 行中, 是预先指定的车皮出站顺序。
Java
package Chapter5HuiSuFa;
import java.util.Arrays;
import java.util.Scanner;
public class ShuangGuiChePiBianXu {
private static class Move{
char code;
char source;
char target;
}
private static short MAXSTEPS = Short.MAX_VALUE;
private static short MAXSHORT = Short.MAX_VALUE;
private static short MAXLEN = Short.MAX_VALUE;
private static Move[] solu,opt;
private static char[] sta,stb,stc;
private static short ks;
private static short n,best;
private static char[] stdd;
private static short[] order;
private static short count;
public static void main(String[] args){
Scanner input = new Scanner(System.in);
while (true){
ks = 0;
best = MAXSHORT;
n = input.nextShort();
order = new short