免費開始練習
moea_joint_essay 102年 [資訊] 資訊管理、程式設計

第 一 題

📖 題組:
圖形的追蹤(Graph Traversal)可分為深度優先搜尋法與廣度優先搜尋法:
📝 此題為申論題,共 3 小題

小題 (一)

請說明深度優先搜尋法(Depth First Search, DFS)及廣度優先搜尋法(Breadth First Search, BFS)。(10 分)。
題目圖片

思路引導 VIP

分別解釋DFS與BFS的走訪方式:DFS 是沿著一條路徑深入直到無法前進才退回;BFS 是以同心圓的方式逐層向外走訪相鄰節點。

🤖
AI 詳解
AI 專屬家教
  1. 深度優先搜尋法 (DFS):是一種用於遍歷或搜尋樹或圖的演算法。這個演算法會盡可能深地沿著圖的分支進行搜尋。當節點 v 的所有邊都己被探尋過,搜尋將回溯到發現節點 v 的那條邊的起始節點。這個過程一直進行到已發現從源節點可達的所有節點為止。如果還存在未被發現的節點,則選擇其中一個作為源節點並重複以上過程,整個進程反覆進行直到所有節點都被訪問為止。
  2. 廣度優先搜尋法 (BFS):是一種圖形遍歷演算法,從一個給定的起始節點開始,首先訪問與該節點直接相連的所有鄰居節點。接著,對這些鄰居節點的鄰居進行遍歷,也就是以層次(Level)為基礎,由近而遠逐層向外擴展。在走訪完距離起點為 k 的所有節點之前,不會走訪距離為 k+1 的節點。

小題 (二)

請分別說明實作上述搜尋法所需使用的資料結構並解釋其原因。(5 分)
題目圖片

思路引導 VIP

說明 DFS 使用堆疊 (Stack),BFS 使用佇列 (Queue),並簡單解釋原因。

🤖
AI 詳解
AI 專屬家教
  1. DFS 實作所需的資料結構:堆疊 (Stack)。原因:DFS 的特性是「後進先出 (LIFO)」,當探索到一個節點時,會先將其相鄰的未走訪節點推入堆疊中,接著馬上從堆疊頂端取出一個節點繼續深入探索,如果走到死胡同,可以藉由堆疊特性退回 (Backtracking) 到上一個有其他分支的節點。
  2. BFS 實作所需的資料結構:佇列 (Queue)。原因:BFS 的特性是「先進先出 (FIFO)」,必須按層次順序訪問節點。當訪問一個節點時,將其所有相鄰的未走訪節點加入佇列尾端,然後從佇列前端取出下一個節點來處理,這樣可以保證較早發現的層級節點會先被處理。

小題 (三)

給予一個無方向性的圖形,如【圖 1】所示,請分別列出使用 DFS 及 BFS 追蹤的數字順序。(從編號 1 的節點出發,並以「由小至大」編號順序原則來追蹤。) (5 分)
題目圖片

思路引導 VIP

觀察圖 1,寫出各節點的鄰接串列(以小到大排序),然後模擬 DFS 及 BFS。注意鄰接節點的選擇順序要是編號由小至大。

🤖
AI 詳解
AI 專屬家教

根據圖 1 建立鄰接表(排序): 1: 2, 8, 11 2: 1, 5, 6

🏷️ 相關主題

物件導向程式設計與系統分析核心概念
查看更多「[資訊] 資訊管理、程式設計」的主題分類考古題