一次面试题:公交网络上(双向图)最优路线的笨解法

本文分享了一道大三面试题,涉及构建双向图数据模型,通过广度优先遍历寻找地铁线路的最短路径和最优票价。程序读取输入文件,计算票价并输出路线到文件,考虑了换乘和站数成本。附有作者当年的代码实现。
摘要由CSDN通过智能技术生成

  PS:因为兴趣爱好,大学里做过许多类似的JAVA小程序,比如:词法识别器并输出简单多层嵌套的代码的执行“中间代码”(类似于JAVA编译产生的字节码),拼图游戏(九宫图求解)等等。其中觉得比较有代表性的算是这个了,所以拿出来分享一下,毕竟对于大三的我来说能独立做出来也是有点成就感吧。

  根据某市地铁线路图写一个地铁票价计算程序
  需求描述:
  1.计费规则:最低2元,超过5站以上每站加收 0.5元,换乘重新起算,例如L1先坐4站,换乘L2再坐6站,结果就是2+2.5=5.5元
  2.程序启动以后读取输入文件(in.txt),内容格式如:
  L2-8,L2-2
  X3,L3-8
  ….
  每行表示一次行程,起点站和终点站之间用逗号分 隔,行数不限
  3.系统按最短路径方案(尽量少换乘且站数少,假设乘 客换乘一次用的时间相当于坐4个站)规划路线,计算票价,并把路线和票价输出到文件(out.txt),内容格式如:
  L2-8,L2-2=2.5:L2-8,L2-7,L2-6,L2-5,L2-4,L2-3,L2-2
  X3,L3-8=4:X3,X4,L3-8
  ….
  等号后面的表示票价和路径

  地铁线路图如下:共有5条线路,X开头的站点表示 换乘车站
  这里写图片描述

  此次代码是在两年前(大三)面试时遇到的一个算法题所写的代码,里面很多命名不规范之处请包涵,大概说一下我的解决思路:在通过建立数据模型后,通过广度优先遍历遍历出所有两点间的路径,再通过算法求出在路径List中最优的路线。
  
  1.数据模型–双向图
  如下代码:

public class Road implements Cloneable {
   
    public Road(){

    }
    public Road(String begin,String end) {
        this.begin = begin;
        this.end = end;
    }
    public Road(String begin,String end,int i) {
            this.begin = end;
            this.end = begin;
    }
    private String begin;
    private String end;
    public String toString() {
        return begin + "->" + end;
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值