1 package cn.edu.karel.work.public_transit_problem;
2
3 import java.io.File;
4 import java.io.FileNotFoundException;
5 import java.io.FileReader;
6 import java.io.IOException;
7 import java.util.ArrayList;
8 import java.util.List;
9
18 public class GreedSolute {
19 /** 发车时刻表数据 */
20 static File forward = new File("D:/mycode/Eclipse/Bus Scheduel Problem/scheduel1/ForwardScheduel/start time.txt");
21 static File backward = new File("D:/mycode/Eclipse/Bus Scheduel Problem/scheduel1/BackScheduel/start time.txt");
22 static int sum = 0;
23
24 public static void main(String[] args) throws IOException{
25 /** 创建时刻表 */
26 Scheduel scheduel = new Scheduel();
27 inputForward(scheduel);
28 inputBackward(scheduel);
29
30 /** 固定行车计划 */
31 ArrayList chain = creatFixedPlan(scheduel);
32
33 /** 可变行车计划 */
34 //chain = creatVariablePlan(scheduel,chain);
35 }
36
37 /**
38 * 将发车时刻表中的所有车次按照 FIFO规则排序
39 *
40 * @param scheduel 发车时刻表
41 * @return list 排序后的车次序号列表
42 */
43 public static ArrayList sortScheduel(Scheduel scheduel){
44 /** 排序后的车次序号列表 */
45 ArrayList list = new ArrayList();
46
47 int i = 0;
48 int j = 0;
49 int k = 0;
50 while(i list,Scheduel scheduel){
83 TrainsitChain chain = new TrainsitChain();
84
85 /** 以当前剩余车次中的第一个车次为该车次链的首个车次*/
86 int index = list.get(0);
87 int len = scheduel.tranListForward.size();
88 if(index >= len ){
89 index -= len;
90 chain.addTransit(scheduel.tranListBack.get(index));
91 }else{
92 chain.addTransit(scheduel.tranListForward.get(index));
93 }
94 list.remove(0);
95
96 /**遍历当前剩余车次搜索到最长车次链 */
97 int i=0;
98 while(i= len)
104 {
105 next -= len;
106 if(scheduel.tranListBack.get(next).getStartTime() >= chain.end){
107 /** 车次链上前后辆车次行驶方向不同 */
108 if(chain.theChain.get(l-1).isForward){
109 chain.addTransit(scheduel.tranListBack.get(next));
110 list.remove(i);
111 }
112 else
113 i++;
114 }
115 else
116 i++;
117 }
118 else{
119 if(scheduel.tranListForward.get(next).getStartTime() >= chain.end)
120 {
121 if(!chain.theChain.get(l-1).isForward){
122 chain.addTransit(scheduel.tranListForward.get(next));
123 list.remove(i);
124 }
125 else
126 i++;
127 }
128 else
129 i++;
130 }
131 }
132 return chain;
133 }
134
135 /**
136 * 读取上行数据
137 * @throws IOException
138 */
139 public static void inputForward(Scheduel scheduel) throws IOException{
140 try{
141 int i = 0;
142 FileInputStream fis = new FileInputStream(forward);
143 InputStreamReader isr = new InputStreamReader(fis);
144 @SuppressWarnings("resource")
145 LineNumberReader lnr = new LineNumberReader(isr);
146 String s = null;
147 while ((s = lnr.readLine()) != null) {
148 int data = Integer.parseInt(s.trim());
149 Transit t = new Transit();
150 t.setID(i);
151 t.setStartTime(data);
152 t.setArriveTime(data+Transit.RUN_FOWARD_TIME);
153 t.setForward(true);
154