8.補上程式碼
(Coding)
/**findShortestPath
* 利用Dijkstra Algorithm 由cities中找出: 從source出發到cities
中各點的shortest path
* 若destination != null 且 destination與source之間有最短路徑
* 則回傳destination與source之間的最短路徑
* Time complexity: O(n3)
*
* @param destination -Cities 指定的目的地
*
* @return LinkedList<AdjacentCities> -source到destination的最
短路徑
*
*/
findShortestPath
//1.將source加入shortestPathList中, 並設定其最短路徑的距離為0, time complexity: O(1)
shortestPathList.add(source);
AdjacentCities source_city = new AdjacentCities();
source_city.setCityName(source.getCityName());
source_city.setDistance(0);
shortestPathList.getFirst().addAdjacentCities(source_city);
//2.while shortestPathList.size <= citiesSum, time complexity: O(n3)
while(shortestPathList.size() <= citiesSum){
//1.findshortestPathList, 得到所有與shortestPathList 相連的Cities中,
//距離最近的cityA 及在cityA到source的最短路徑上, shortestPathList中與cityA直接相連的cityB, time
complexity:O(n2)
AdjacentCities cityA = new AdjacentCities();
cityA.setCityName(null);
CityA.setDistance(65536);
Cities cityB = new Cities();
cityB.setCityName(null);
cityB.setAdjacentCitiesList(new LinkedList<AdjacentCities>());
cityB.getAdjacentCitiesList().add(cityA);
findshortestPathList(shortestPathList, cityA, cityB);
findShortestPath
//2.檢查是否找到cityA, 若沒有找到, 則回傳 destination的最短路徑
if(cityA.getDistance() == 65536){return setDestination(shortestPathList,
destination);}
//3.將cityA加入shortestPathList並設定其最短路徑為 cityB的最短路徑+cityA
cityA.setDistance(cityA.getDistance()+cityB.getAdjacentCitiesList().getLast().ge
tDistance());
Cities city = new Cities();
city.setCityName(cityA.getCityName());
city.setAdjacentCitiesList(cityB.getAdjacentCitiesList());
city.addAdjacentCities(cityA);
shortestPathList.add(city);
}//endwhile
© Copyright 2026 Paperzz