深度優先遍歷和廣度優先遍歷


深度優先遍歷

假設給定圖G的初態是所有頂點均未曾訪問過。在G中任選一頂點v為初始出發點(源點),則深度優先遍歷可定義如下:首先訪問出發點v,並將其標記為已訪問過;然后依次從v出發搜索v的每個鄰接點w。若w未曾訪問過,則以w為新的出發點繼續進行深度優先遍歷,直至圖中所有和源點v有路徑相通的頂點(亦稱為從源點可達的頂點)均已被訪問為止。若此時圖中仍有未訪問的頂點,則另選一個尚未訪問的頂點作為新的源點重復上述過程,直至圖中所有頂點均已被訪問為止。
圖的深度優先遍歷類似於樹的前序遍歷。采用的搜索方法的特點是盡可能先對縱深方向進行搜索。這種搜索方法稱為深度優先搜索(Depth-First Search)。相應地,用此方法遍歷圖就很自然地稱之為圖的深度優先遍歷。

說白了深度優先遍歷就是一種不撞南牆不會頭的算法,他會把一條路走完之后再回溯到有分叉的節點繼續遍歷。
如圖:

  1. 首先標記點0,然后按字典序尋找未標記的相鄰點進行遍歷(點1)。
  2. 標記點1,按字典序尋找未標記的相鄰點繼續遍歷(點4)。
  3. 同步驟2,直到遍歷到點3,因為與他相鄰的點(點0,點6)都被標記過,所以回溯到點6,繼續尋找點6的未標記的相鄰點繼續遍歷(點7)。
  4. 標記點7,同步驟3,回溯點6。
  5. 這時點6的所有相鄰點都被標記,回溯點4。
  6. 同步驟5,繼續回溯到點1。
  7. 按字典序尋找點1的未標記的相鄰點繼續遍歷(點2)。
  8. 同步驟2,遍歷點5。
  9. 同步驟5,回溯到點0,此時整個圖的點都被遍歷過,結束。

遍歷結果 01463725
例題:數據結構實驗之圖論二:圖的深度遍歷

廣度優先遍歷

  1. 從圖中某個頂點V0出發,並訪問此頂點;
  2. 從V0出發,訪問V0的各個未曾訪問的鄰接點W1,W2,…,Wk;然后,依次從W1,W2,…,Wk出發訪問各自未被訪問的鄰接點;
  3. 重復步驟2,直到全部頂點都被訪問為止。
    這是一種層層遞進的算法,與樹的層序遍歷類似。
    在廣度優先搜索時,會從起點開始“一層一層”擴展的方法來遍歷,擴展時每發現一個點就將這個點加入到隊列,直到整張圖都被遍歷過位置。

例題:數據結構實驗之圖論一:基於鄰接矩陣的廣度優先搜索遍歷

引用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM