8 Coding find Shortest Path Dijkstra Algorithm cities

  • Slides: 3
Download presentation
8. 補上程式碼 (Coding) /**find. Shortest. Path * 利用Dijkstra Algorithm 由cities中找出: 從source出發到cities 中各點的shortest path *

8. 補上程式碼 (Coding) /**find. Shortest. Path * 利用Dijkstra Algorithm 由cities中找出: 從source出發到cities 中各點的shortest path * 若destination != null 且 destination與source之間有最短路徑 * 則回傳destination與source之間的最短路徑 * Time complexity: O(n 3) * * @param destination -Cities 指定的目的地 * * @return Linked. List<Adjacent. Cities> -source到destination的最 短路徑 * */

find. Shortest. Path //1. 將source加入shortest. Path. List中, 並設定其最短路徑的距離為 0, time complexity: O(1) shortest. Path.

find. Shortest. Path //1. 將source加入shortest. Path. List中, 並設定其最短路徑的距離為 0, time complexity: O(1) shortest. Path. List. add(source); Adjacent. Cities source_city = new Adjacent. Cities(); source_city. set. City. Name(source. get. City. Name()); source_city. set. Distance(0); shortest. Path. List. get. First(). add. Adjacent. Cities(source_city); //2. while shortest. Path. List. size <= cities. Sum, time complexity: O(n 3) while(shortest. Path. List. size() <= cities. Sum){ //1. findshortest. Path. List, 得到所有與shortest. Path. List 相連的Cities中, //距離最近的city. A 及在city. A到source的最短路徑上, shortest. Path. List中與city. A直接相連的city. B, time complexity: O(n 2) Adjacent. Cities city. A = new Adjacent. Cities(); city. A. set. City. Name(null); City. A. set. Distance(65536); Cities city. B = new Cities(); city. B. set. City. Name(null); city. B. set. Adjacent. Cities. List(new Linked. List<Adjacent. Cities>()); city. B. get. Adjacent. Cities. List(). add(city. A); findshortest. Path. List(shortest. Path. List, city. A, city. B);

find. Shortest. Path //2. 檢查是否找到city. A, 若沒有找到, 則回傳 destination的最短路徑 if(city. A. get. Distance() ==

find. Shortest. Path //2. 檢查是否找到city. A, 若沒有找到, 則回傳 destination的最短路徑 if(city. A. get. Distance() == 65536){return set. Destination(shortest. Path. List, destination); } //3. 將city. A加入shortest. Path. List並設定其最短路徑為 city. B的最短路徑+city. A. set. Distance(city. A. get. Distance()+city. B. get. Adjacent. Cities. List(). get. Last(). ge t. Distance()); Cities city = new Cities(); city. set. City. Name(city. A. get. City. Name()); city. set. Adjacent. Cities. List(city. B. get. Adjacent. Cities. List()); city. add. Adjacent. Cities(city. A); shortest. Path. List. add(city); }//endwhile