1 / 15

DFS 與 BFS

DFS 與 BFS.  圖形結構儲存方式.  Breadth-first search (BFS) 廣度優先搜尋法. 依序走訪同一層的所有節點,走訪完畢後,才繼續走訪下一層的節點 BFS 會使用到 queue ( 佇列 -- 先進先出 ) 來紀錄過程中展開的節點. 1. 1. 2. 3. 2. 3. 5. 4. 6. 4. 5. 6. 7. 8. 8. 7. BFS 演算法. Step 1: From a 1-element queue consisting of the root node // 從包含根節點的佇列開始

Download Presentation

DFS 與 BFS

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. DFS與BFS

  2. 圖形結構儲存方式

  3. Breadth-first search (BFS)廣度優先搜尋法 • 依序走訪同一層的所有節點,走訪完畢後,才繼續走訪下一層的節點 • BFS 會使用到queue (佇列--先進先出) 來紀錄過程中展開的節點 1 1 2 3 2 3 5 4 6 4 5 6 7 8 8 7

  4. BFS 演算法 Step 1: From a 1-element queue consisting of the root node // 從包含根節點的佇列開始 Step 2: Test to see if the first element in the queue is a goal node. If it is, stop; otherwise, go to step 3. // 測試佇列的第一個元素是否為目標,若是,則停止, 否則, 做step 3. Step 3: Remove the first element from the queue. Add the first element’s descendants, if any, to the end of the queue . //移除第一個元素, 加入其子代到佇列的末端 Step 4: If the queue is empty, then failure. Otherwise, go to step 2 //若佇列是空的,則失敗;否則 作 step 2

  5. Depth-first search (DFS) 縱度優先搜尋法 • 先走訪越深的子節點, 直到該點沒有子節點後,回溯到最近尚有未走訪子節點的節點,再繼續下訪其他節點 • DFS 會使用到Stack (堆疊—後進先出) 來紀錄過程中展開的節點 1 1 2 7 2 3 4 3 8 4 5 6 7 8 6 5

  6. DFS演算法

  7. DFS 演算法 Step 1: From a 1-element stack consisting of the root node // 從包含根節點的堆疊開始 Step 2: Test to see if the top element in the stack is a goal node. If it is, stop; otherwise, go to step 3. // 測試堆疊的頂端元素是否為目標,若是,則停止, 否則, 做step 3. Step 3: Remove the top element from the stack and add the first element’s descendants, if any, to the top of the stack . //移除堆疊頂端元素, 加入其子代到堆疊的頂端 Step 4: If the stack is empty, then failure. Otherwise, go to step 2 //若堆疊是空的,則失敗;否則 作 step 2

  8. Depth-first search (DFS) 解題範例 • 2007 NPSC決賽試題 格子編號

  9. 8 0 8 2 2 7 8 8 7 8 7 2 7 2 2 2 7 2 8 8 2 7 7 2 8 8 7 6 5 4 5 6 6 4 4 4 5 0 0 4 5 0 6 4 4 5 6 5 7 5 6 4 4 5 0 6 3 3 5 0 1 3 0 1 1 1 1 1 3 6 1 6 3 1 0 3 3 0 1 3 3 1 2 A

  10. 列出移動規則 0:右、下 1:左、右、下 2:左、下 3:上、右、下 4:左、右、上、下 5:上、左、下 6:上、右 7:上、左、右 8:上、左 • 若目前是往上(下)移動,則 下一次的移動不可往下(上) , 以避免重覆走訪,例如上圖 A走訪。 上:3~8 下:0~5 左:1、2、4、5、7、8 右:0、1、3、4、6、7

  11. DFS程式(以遞迴實作)

  12. Breadth-first search (BFS)解題範例 老鼠找食物(廣度搜尋) 迷宮裡飢腸轆轆的老鼠得到一張地圖,上面記載了迷宮地圖、目前所在位置、及所有食物所在位置。 老鼠在迷宮裡只能上下左右移動,一次移動一格,並且不能超過邊界。 請依照距離由近到遠,列出牠從目前位置到每一個可以到得了的食物所在點,所需移動的最小步數。 輸入: 輸入檔案第一行的兩個整數代表地圖的大小(M, N) (0<M, N <80, M不一定等於N)。 第二行以後有M行(每行N個)字母記載地圖的組態。 字母B代表不能穿越的障礙物; 字母C代表可自由移動的空間; 字母R代表老鼠現在所在位置; 字母F代表食物所在位置(可以穿越)。 輸出: 在每行印出食物所在座標(左下角原點的座標為(0,0),橫向為X,縱向為Y)及老鼠走到此座標所需步數。 依步數由小到大印出。若步數相同,印出順序不限。 範例一: 輸入: 5 5 BCBBC CFCCB BCBBC RCCBF BCCCC 輸出: (1,3) 3 (4,1) 6

  13. B C B B C C F C C B B C B B C R C C B F B C C C C 4 3 2 1 0 R(0,1) B(0,2) C(1,1) B(0,0) 0 1 2 3 4 C(0,3) C(1,2) R(0,1)

  14. BFS程式

More Related