标签:测试用例 bool nts 很多 out ble his str ==
java
Dijkstra算法
(代码)https://github.com/SilenceBoom/TheShortestPath.git
Station.java | 储存站的信息 |
Line.java | 储存线路信息 |
TheShortestPath.java | 主程序 |
public class Line { private String name;//线路名 private ArrayList<Station> stations =new ArrayList<Station>(); private int size; public Line() { } public void addStation(Station station) { stations.add(station); size++; } public void setName(String name) { this.name=name; } public String getName() { return name; } public Station getStation(int index) { return stations.get(index); } public ArrayList<Station> getLine(){ return stations; } public int getSize() { return size; } }
public class Station{ private String name;//站名 private List<String> line = new ArrayList<String>();//所在的线路 private List<Station> linkStation =new ArrayList<Station>();//前后站 public Station(){ } public Station(String name,List<String> line,List<Station> linkStation) { this.name=name; this.line=line; this.linkStation=linkStation; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void addLine(String name) { line.add(name); } public String getLineName(int index) { return line.get(index); } public List<String> getLine(){ return line; } public void setLine(String name) { line.add(name); } public List<Station> getLinkStation() { return linkStation; } public void setLinkStation(List<Station> linkStation) { this.linkStation = linkStation; } public void addLinkStation(Station station) { linkStation.add(station); } }
public class TheShortestPath { public static void main(String[] args) throws IOException{ String path="地铁线路信息.txt"; File f =new File(path); Scanner input=new Scanner(System.in); ArrayList<Line> map = new ArrayList();//所有线路及站 ArrayList<Station> all=new ArrayList();//所有站,不重复 try { BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(f),"UTF-8")); String str=null; while((str=br.readLine())!=null) { String[] st=str.split(" "); Line line=new Line(); line.setName(st[0]); for(int i=1;i<st.length;i++) { Station station=new Station(); station.addLine(st[0]); station.setName(st[i]); line.addStation(station); } map.add(line); } for(int i=0;i<map.size();i++) { for(Station j:map.get(i).getLine()) { int n=0; for(n=0;n<all.size();n++) { if((all.get(n).getName()).compareTo(j.getName())==0) { all.get(n).addLine(j.getLineName(0)); break; } } if(n>=all.size()) { all.add(j); } } } // for(int i=0;i<all.size();i++) { // System.out.println(all.get(i).getName()); // for(String n:all.get(i).getLine()) { // System.out.print(n+" "); // } // System.out.println(); // } br.close(); }catch(Exception e) { e.printStackTrace(); } System.out.print("请输入起始站:"); String start=input.next(); System.out.print("请输入终点站:"); String end=input.next(); Shortest(start,end,all,map); } public static void Shortest(String start,String end,ArrayList<Station> all,ArrayList<Line> map) { Station startStation =new Station(); Station endStation =new Station(); boolean isSame=false; String lineName=" "; int line=-1; //获取两个站的信息 for(int i=0;i<all.size();i++) { if((all.get(i).getName()).compareTo(start)==0) { startStation=all.get(i); } else if((all.get(i).getName()).compareTo(end)==0) { endStation=all.get(i); } } //判断是否从属一条线 for(String i:startStation.getLine()) { if(endStation.getLine().contains(i)) { isSame=true; lineName=i; } } if(isSame) { for(int i=0;i<map.size();i++) { if(map.get(i).getName().compareTo(lineName)==0) { line=i; } } int isOut=-1; for(Station i:map.get(line).getLine()) { if(i.getName().compareTo(start)==0||i.getName().compareTo(end)==0) { System.out.print(i.getName()+" "); isOut=-isOut; } else if(isOut==1) { System.out.print(i.getName()+" "); } } } else { List<String> sameline=new ArrayList(); } } }
八宝山
西单
八宝山 玉泉路 五棵松 万寿路 公主坟 军事博物馆 木樨路 南礼士路 复兴门 西单
1号线
苹果园 古城 八角游乐园 八宝山 玉泉路 五棵松 万寿路 公主坟 军事博物馆 木樨路 南礼士路 复兴门 西单 天安门西 天安门东 王府井 东单 建国门 永安里 国贸 大望路 四惠 四惠东
6号线
海淀五路居 慈寿寺 花园桥 白石桥南 车公庄西 车公庄 平安里 北海北 南锣鼓巷 东四 朝阳门 东大桥 呼家楼 金台路 十里堡 青年路 褡裢坡 黄渠 常营 草房 物资学院路 通州北关 北运河西 郝家府 东夏园 潞城
Dijkstra算法运用起来还是有点难....还需要再完善很多很多....
标签:测试用例 bool nts 很多 out ble his str ==
原文地址:https://www.cnblogs.com/silencedsz/p/13925285.html