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

深度優先遍歷

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

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

  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,直到所有頂點都被訪問爲止。
    這是一種層層遞進的算法,與樹的層序遍歷相似。
    在廣度優先搜索時,會從起點開始「一層一層」擴展的方法來遍歷,擴展時每發現一個點就將這個點加入到隊列,直到整張圖都被遍歷過位置。

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

引用

相關文章
相關標籤/搜索