圖的遍歷之深度優先和廣度優先
阿新 • • 發佈:2017-11-17
優先 ges sky 深度優先 們的 老師 ear blog earch
圖的遍歷之深度優先和廣度優先
深度優先遍歷
假設給定圖G的初態是所有頂點均未曾訪問過。在G中任選一頂點v為初始出發點(源點),則深度優先遍歷可定義如下:首先訪問出發點v,並將其標記為已訪問過;然後依次從v出發搜索v的每個鄰接點w。若w未曾訪問過,則以w為新的出發點繼續進行深度優先遍歷,直至圖中所有和源點v有路徑相通的頂點(亦稱為從源點可達的頂點)均已被訪問為止。若此時圖中仍有未訪問的頂點,則另選一個尚未訪問的頂點作為新的源點重復上述過程,直至圖中所有頂點均已被訪問為止。
圖的深度優先遍歷類似於樹的前序遍歷。采用的搜索方法的特點是盡可能先對縱深方向進行搜索。這種搜索方法稱為深度優先搜索(Depth-First Search)。相應地,用此方法遍歷圖就很自然地稱之為圖的深度優先遍歷。
- 基本實現思想:
- (1)訪問頂點v;
- (2)從v的未被訪問的鄰接點中選取一個頂點w,從w出發進行深度優先遍歷;
- (3)重復上述兩步,直至圖中所有和v有路徑相通的頂點都被訪問到。
- 深度優先的順序:
- 以A為頂點:ABCE-D
- 以B為頂點:BCE-D-A
- 以C為頂點:CE-BD-A
- 以D為頂點:DCE-AB
- 以E為頂點:E-ABC-D
廣度優先遍歷
圖的廣度優先遍歷BFS算法是一個分層搜索的過程,和樹的層序遍歷算法類同,它也需要一個隊列以保持遍歷過的頂點順序,以便按出隊的順序再去訪問這些頂點的鄰接頂點。
基本思想:從圖中某頂點v出發,在訪問了v之後依次訪問v的各個未曾訪問過的鄰接點,然後分別從這些鄰接點出發依次訪問它們的鄰接點,並使得“先被訪問的頂點的鄰接點先於後被訪問的頂點的鄰接點被訪問,直至圖中所有已被訪問的頂點的鄰接點都被訪問到。如果此時圖中尚有頂點未被訪問,則需要另選一個未曾被訪問過的頂點作為新的起始點,重復上述過程,直至圖中所有頂點都被訪問到為止。
- 廣度優先的順序:
- 以A為頂點:ABDEC
- 以B為頂點:BCDAE
- 以C為頂點:CEABD
- 以D為頂點:DCEAB
- 以E為頂點:EABDC
感想
- 在課堂上的時候沒有完全消化老師所講的內容,通過課後的學習將這兩種遍歷方法搞明白了。
參考
- 深度優先遍歷與廣度優先遍歷
- 圖的遍歷之 深度優先搜索和廣度優先搜索
圖的遍歷之深度優先和廣度優先