圖的深度優先遍歷(DFS)和廣度優先遍歷(BFS)算法分析

1. 深度優先遍歷

深度優先遍歷(Depth First Search)的主要思想是:
1、首先以一個未被訪問過的頂點作爲起始頂點,沿當前頂點的邊走到未訪問過的頂點;
2、當沒有未訪問過的頂點時,則回到上一個頂點,繼續試探別的頂點,直至所有的頂點都被訪問過。

在此我想用一句話來形容 “不到南牆不回頭”

1.1 無向圖的深度優先遍歷圖解

以下"無向圖"爲例:
在這裏插入圖片描述

對上無向圖進行深度優先遍歷,從A開始:
第1步:訪問A。
第2步:訪問B(A的鄰接點)。 在第1步訪問A之後,接下來應該訪問的是A的鄰接點,即"B,D,F"中的一個。但在本文的實現中,頂點ABCDEFGH是按照順序存儲,B在"D和F"的前面,因此,先訪問B。
第3步:訪問G(B的鄰接點)。 和B相連只有"G"(A已經訪問過了)
第4步:訪問E(G的鄰接點)。 在第3步訪問了B的鄰接點G之後,接下來應該訪問G的鄰接點,即"E和H"中一個(B已經被訪問過,就不算在內)。而由於E在H之前,先訪問E。
第5步:訪問C(E的鄰接點)。 和E相連只有"C"(G已經訪問過了)。
第6步:訪問D(C的鄰接點)。
第7步:訪問H。因爲D沒有未被訪問的鄰接點;因此,一直回溯到訪問G的另一個鄰接點H。
第8步:訪問(H的鄰接點)F。
因此訪問順序是:A -> B -> G -> E -> C -> D -> H -> F

1.2 有向圖的深度優先遍歷

有向圖的深度優先遍歷圖解:
在這裏插入圖片描述
對上有向圖進行深度優先遍歷,從A開始:
第1步:訪問A。
第2步:訪問(A的出度對應的字母)B。 在第1步訪問A之後,接下來應該訪問的是A的出度對應字母,即"B,C,F"中的一個。但在本文的實現中,頂點ABCDEFGH是按照順序存儲,B在"C和F"的前面,因此,先訪問B。
第3步:訪問(B的出度對應的字母)F。 B的出度對應字母只有F。
第4步:訪問H(F的出度對應的字母)。 F的出度對應字母只有H。
第5步:訪問(H的出度對應的字母)G。
第6步:訪問(G的出度對應字母)E。 在第5步訪問G之後,接下來應該訪問的是G的出度對應字母,即"B,C,E"中的一個。但在本文的實現中,頂點B已經訪問了,由於C在E前面,所以先訪問C。
第7步:訪問(C的出度對應的字母)D。
第8步:訪問(C的出度對應字母)D。 在第7步訪問C之後,接下來應該訪問的是C的出度對應字母,即"B,D"中的一個。但在本文的實現中,頂點B已經訪問了,所以訪問D。
第9步:訪問E。D無出度,所以一直回溯到G對應的另一個出度E。
因此訪問順序是:A -> B -> F -> H -> G -> C -> D -> E

2.廣度優先遍歷

廣度優先遍歷(Depth First Search)的主要思想是:類似於樹的層序遍歷。

2.1 無向圖的廣度優先遍歷圖解:

在這裏插入圖片描述
從A開始,有4個鄰接點,“B,C,D,F”,這是第二層;
在分別從B,C,D,F開始找他們的鄰接點,爲第三層。以此類推。
在這裏插入圖片描述
因此訪問順序是:A -> B -> C -> D -> F -> G -> E -> H

2.2 有向圖的廣度優先遍歷圖解:

在這裏插入圖片描述
與無向圖類似 。可以參考。
在這裏插入圖片描述
因此訪問順序是:A -> B -> C -> F -> D -> H -> G -> E

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章