62,614
社区成员
发帖
与我相关
我的任务
分享
package com.test.test;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Test3 {
static Map<Integer,Station> stationMap=new HashMap<Integer,Station>();
public static void main(String[] args) {
Station station1=new Station(1,"1号线第一站",true,false);
Station station2=new Station(1,"1号线第二站",false,false);
station1.setNextStation(station2);
Station station3=new Station(1,"第三站",false,true);
station3.addTransferStations(2);
station2.setNextStation(station3);
Station station4=new Station(1,"1号线第四站",true,false);
station3.setNextStation(station4);
Station station21=new Station(2,"2号线第一站",true,false);
Station station22=new Station(2,"2号线第二站",false,false);
station21.setNextStation(station22);
Station station23=new Station(2,"第三站",false,true);
station23.addTransferStations(1);
station22.setNextStation(station23);
Station station24=new Station(2,"2号线第四站",true,false);
station23.setNextStation(station24);
stationMap.put(1, station1);
stationMap.put(1, station21);
int n=getPosition(station1, "1号线第一站", "1号线第四站", 0);
System.out.println(n);
}
/**
* 计算站点间距离
* @param station
* @param start
* @param end
* @param stationNum 前面已经经过几站
* @return
*/
public static int getPosition(Station station,String start,String end,int stationNum){
Iterator<Station> it=station.iterator();
Station startStation=null;
while(it.hasNext()){//找到起始站
Station s=it.next();
if(s.getStationName().equals(start)){
startStation=s;
break;
}
}
Station next=startStation.getNextStation();
int num=1;
while(!next.getStationName().equals(end)){
next=next.getNextStation();
if(next==null){
return -1;//不可达
}
if(next.isTransfer){//如果是换成站
//循环所以可以换成的路线 递归调用getPosition
}else{//如果不是换成站
}
num++;
}
return stationNum+num;
}
/**
* 站点类
* @author Administrator
*
*/
static class Station implements Iterable<Station>{
private int lineNum;//几号线
private String stationName;//站名
private boolean isStartOrEnd;//是否是首站或末站
private boolean isTransfer;//是否是换乘站
private Station nextStation;//該号线的下一站
private Station preStation;//上一站
private Set<Integer> transferStations;//可以换乘那几号线
public Station(int lineNum,String stationName,boolean isStartOrEnd,boolean isTransfer){
this.lineNum=lineNum;
this.stationName=stationName;
this.isStartOrEnd=isStartOrEnd;
this.isTransfer=isTransfer;
}
public int getLineNum() {
return lineNum;
}
public void setLineNum(int lineNum) {
this.lineNum = lineNum;
}
public String getStationName() {
return stationName;
}
public void setStationName(String stationName) {
this.stationName = stationName;
}
public boolean isStartOrEnd() {
return isStartOrEnd;
}
public void setStartOrEnd(boolean isStartOrEnd) {
this.isStartOrEnd = isStartOrEnd;
}
public boolean isTransfer() {
return isTransfer;
}
public void setTransfer(boolean isTransfer) {
this.isTransfer = isTransfer;
}
public Station getNextStation() {
return nextStation;
}
public void setNextStation(Station nextStation) {
this.nextStation = nextStation;
}
public Station getPreStation() {
return preStation;
}
public void setPreStation(Station preStation) {
this.preStation = preStation;
}
public Set<Integer> getTransferStations() {
return transferStations;
}
public void addTransferStations(Integer transferStation) {
if(transferStations==null){
transferStations=new HashSet<Integer>();
}
transferStations.add(transferStation);
}
@Override
public String toString() {
return "开始站---> [lineNum=" + lineNum + ", stationName="
+ stationName + ", isStartOrEnd=" + isStartOrEnd
+ ", isTransfer=" + isTransfer + "]";
}
@Override
public Iterator<Station> iterator() {
return new StationIterator(this);
}
}
static class StationIterator implements Iterator<Station>{
private Station station;
public StationIterator(Station station){
this.station=station;
}
@Override
public boolean hasNext() {
return station!=null;
}
@Override
public Station next() {
Station temp=station;
this.station=temp.getNextStation();
return temp;
}
@Override
public void remove() {
}
}
}
写了一部分,目前只可以算在同一号线上的距离。