参考
知网 某硕士论文:宅急送路由辅助信息系统的设计与实现
试算逻辑为::
a. 根据选择的出发地找到所有从当前出发地发车的资源包括航空、班车和
零担存放到 Map(起名 map1)里备用。
b. 循环遍历 map1,循环体里再用资源的到达城市作为出发城市继续执行 a
的操作将资源存放到 Map2 里,并且与 map1 里的数据进行拼接
c. 如果在执行拼接的过程中资源的到达城市跟是界面录入的到达城市相
同,将结果放入 Map(起名 mapResult),否则继续拼接执行 b 的操作。
d. 最多执行 5 次 b 步骤。满足最多中转 4 次的要求,或者也可以按照界面
的要求控制次数。
e. 对 mapResult 的结果执行过滤,保留优质的路由。
f. 最终将剩下的路由保存到系统。
具体代码实现如下:
ssm下的测试代码
测试方法代码
@Test
public void testMapper() throws Exception {
List<Routelinebill> findByStartCity = routelinebillMapper.findByStartCity("北京");
Routebill routebill = new Routebill();
routebill.setStartcity("北京市");
routebill.setEndcity("湛江市");
List<Routebill> results=new ArrayList<>();
trial(findByStartCity, routebill, results);
for (Iterator iterator = results.iterator(); iterator.hasNext();) {
Routebill routebill1 = (Routebill) iterator.next();
System.out.println(routebill1.toString());
}
}
试算的实现,一个迭代的算法
public void trial(List<Routelinebill> startline,Routebill result,List<Routebill> results){
for (Iterator iterator = startline.iterator(); iterator.hasNext();) {
Routebill result2 = (Routebill)result.clone();
Routelinebill routelinebill = (Routelinebill) iterator.next();
routelinebill.setId(UUIDUtils.getId());
//保存路由起始时间
if (routelinebill.getStartstation().equals(result2.getStartcity())) {
result2.setStarttime(routelinebill.getStarttime());
result2.setName(result2.getStartcity()+"-"+result2.getEndcity()+"(起始:"+routelinebill.getLinename()+")");
//每一次刚开始循环都清空
}
result2.setRouteprice(routelinebill.getLineprice()+result2.getRouteprice());
result2.setMileage(routelinebill.getMileage()+result2.getMileage());
result2.setSumDuration(routelinebill.getDuration()+result2.getSumDuration());
result2.getRoutelinebills().add(routelinebill);
//如果终点一致就存起来继续下一个遍历
if (routelinebill.getEndstation().equals(result2.getEndcity())) {
result2.setEndtime(routelinebill.getEndtime());
result2.getTimelimit();
result2.setId(UUIDUtils.getId());
results.add(result2);
continue;
}
//不一致就存到中转站中
if (result2.getTransfernode1()==null) {
result2.setTransfernode1(routelinebill.getEndstation());
}else if (result2.getTransfernode2()==null) {
result2.setTransfernode2(routelinebill.getEndstation());
}else if (result2.getTransfernode3()==null) {
result2.setTransfernode3(routelinebill.getEndstation());
}else if (result2.getTransfernode4()==null) {
result2.setTransfernode4(routelinebill.getEndstation());
}else{
continue;
}
List<Routelinebill> findByStartCity = routelinebillService.findByStartCity(routelinebill.getEndstation());
if (findByStartCity == null) {
continue;
}
trial(findByStartCity, result2, results);
}
}