以下為我的理解,若有疏漏煩請指正:
深度優先搜尋為使用堆疊(stack)進行走訪的方法,首先將起點走訪、然後選擇一個相鄰的節點走訪後push上一節點進stack、當某條路徑走到底(即所有鄰接頂點都已訪問過)時,使用pop來找到並回溯到上一層頂點,繼續其他未訪問的鄰接頂點的探索。
以本題為例,具體操作流程如下:
- 起點為A,走訪A。
- 選擇B為下個走訪的節點,走訪並將上一節點Apush進stack:s = [A]。
- 選擇D為下個走訪的節點,走訪並將上一節點Bpush進stack:s = [A, B]。
- 選擇H為下個走訪的節點,走訪並將上一節點Dpush進stack:s = [A, B, D]。
- 選擇E為下個走訪的節點,走訪並將上一節點Hpush進stack:s = [A, B, D, H]。
- E後面已經沒有為走訪的節點,因此pop出H尋找與H相鄰的其他節點:s = [A, B, D]。
- 找到F,選擇F為下個走訪的節點,走訪並將上一節點Hpush進stack:s = [A, B, D, H]。
- 選擇C為下個走訪的節點,走訪並將上一節點Fpush進stack:s = [A, B, D, H, F]。
- C後面已經沒有為走訪的節點,因此pop出F尋找與F相鄰的其他節點:s = [A, B, D, H]。
- F後面已經沒有為走訪的節點,因此pop出H尋找與H相鄰的其他節點:s = [A, B, D]。
- 找到G,選擇G為下個走訪的節點,走訪並將上一節點Hpush進stack:s = [A, B, D, H]。
- G後面已經沒有為走訪的節點,而連續pop出H、D、B、A都沒有找到其他未走訪的相鄰節點。
- 得出走訪順序為ABDHEFCG。
有一點值得提的是,走訪順序並非唯一,所以得出其他順序也並非一定錯誤。
附上不錯的教學影片:https://www.youtube.com/watch?v=pcKY4hjDrxk&ab_channel=AbdulBari