1. 程式人生 > >廣度優先搜索

廣度優先搜索

編輯 兩個 出發 需要 使用 http 最短路徑問題 bre src

  首先,我將說說什麽是圖(它們不涉及X軸和Y軸),在我所知道的算法中,圖算法應該是最有用的。再介紹第一種圖算法——廣度優先搜索(breadth-first search,BFS)。
  廣度優先搜索讓你能夠找出兩樣東西之間的最短距離,不過最短距離的含義有很多!使用廣度優先搜索可以:

  • 編寫國際跳棋AI,計算最少走多少步就可獲勝;
  • 編寫拼寫檢查器,計算最少編輯多少個地方就可將錯拼的單詞改成正確的單詞,如將READED改為READER需要編輯一個地方;
  • 根據你的人際關系網絡找到關系最近的醫生。

1 圖簡介

  假設你居住在舊金山,要從雙子峰前往金門大橋。你想乘公交車前往,並希望換乘最少。可乘坐的公交車如下。技術分享圖片


  為找出換乘最少的乘車路線,你將使用什麽樣的算法?
  一步就能到達金門大橋嗎?下面突出了所有一步就能到達的地方。技術分享圖片
  金門大橋未突出,因此一步無法到達那裏。兩步能嗎?技術分享圖片

  金門大橋也未突出,因此兩步也到不了。三步呢?技術分享圖片


  金門大橋突出了!因此從雙子峰出發,可沿下面的路線三步到達金門大橋。技術分享圖片
  還有其他前往金門大橋的路線,但它們更遠(需要四步)。這個算法發現,前往金門大橋的最短路徑需要三步。這種問題被稱為最短路徑問題(shorterst-path problem)。你經常要找出最短路徑,這可能是前往朋友家的最短路徑,也可能是國際象棋中把對方將死的最少步數。解決最短路徑問題的算法被稱為廣度優先搜索。

要確定如何從雙子峰前往金門大橋,需要兩個步驟。
  (1) 使用圖來建立問題模型。
  (2) 使用廣度優先搜索解決問題。
  下面介紹什麽是圖,然後再詳細探討廣度優先搜索。

廣度優先搜索