圖的走訪 — BFS, DFS(1)

Sharon Peng
3 min readSep 20, 2020

--

之前有提到要怎麼建立一個圖,今天就要來講講要怎麼去走訪那些圖。

以下的程式碼,使用的是C++。

主要在走訪有兩種方法:DFS(深度優先搜尋), BFS(廣度優先搜尋)

想必如果是一開始看到這個詞,一定會有很多疑問,學了這個要幹嘛,要怎麼運用?

筆者我還沒有實際應用的經驗,所以我都把它想程式是寫程式的搜尋技巧,先學起來以備不時之需。

DFS(深度優先搜尋)

前面說過DFS是一種走訪方式,所以一定會需要一個東西,讓我們去走訪。那這個東西是什麼呢?

答案就是「圖」。

如果對建立一個圖的概念還不是太清楚的話,可以點這裡先看過一遍後,再來看這篇,會比較清楚~~

深度優先搜尋法(Depth First Search),先找一個node然後深入那個路徑做搜尋。如下圖

DFS時,我們用stack這個容器去實作。

整個流程就只有三個動作:

1. push 到 stack

2. pop 檢查是不是目標物

3. 如果沒有東西可以 push進去,回去看 stack最上面(top)的元素

stack最上面(top)的元素,就是我們目前的位子用這個想法去看下面的圖片,可以理解得更快。

找到「出納」的過程,如下圖:

這邊可能會有疑問,為什麼一開始push進去後,又馬上把它pop掉?

這是因為這邊所做的 pop,代表的意義就是要去檢查是不是目標 node

是的話:搜尋成功

不是的話:把跟他相鄰的 node都 push到 stack裡面

之後看到 pop時,就是代表他在做檢查的動作。

如果最後什麼東西都沒有找到的話,stack變成空,也就是說我們這次的DFS搜尋失敗。

這邊的「圖」是有方向性的圖,所以程式碼可能會跟無方向性的圖有些不一樣。

程式碼如下:(因為字串的型態會比較複雜一點,所以這邊就用數字來表示)

無向圖(Undirected Graph)的部分:

無向圖的程式碼:(使用遞迴)

這次的投影片比較多,謝謝大家能耐心看完它。

那我們BFS,就等到下一篇再來講吧。

--

--

Sharon Peng
Sharon Peng

No responses yet