數據結構-什麼是圖和圖的遍歷

什麼是圖?

在這裏插入圖片描述

圖:表示多對多的關係。
包含:

  • 一組頂點:通常用V(Vertex)表示的頂點集合

  • 一組邊:通常E(Edge)表示邊的集合,也就是頂點對

    • 無向邊:v — w 兩個頂點之間無論任何方向都可以連通 ,常用( v, w )表示
    • 有向邊:v —> w 也就是隻允許從頂點A到頂點B,常用< v, w >表示
    • 不考慮重邊和自迴路

在這裏插入圖片描述

圖的存儲結構

1、鄰接矩陣表示法
在這裏插入圖片描述

我表示看不懂
在這裏插入圖片描述
2、鄰接表表示法
在這裏插入圖片描述

圖的遍歷

1、深度優先搜索DFS (Depth First Search)
在這裏插入圖片描述
現在用點亮燈泡的方式模擬遍歷
步驟如下:

  1. 先點亮入口處A的燈,然後站在A處後發現有B和E兩處燈光未點亮
  2. 選擇點亮B,站在B處後發現C未點亮…
  3. 此處省略相同步驟,點亮D處的燈後發現面前有E、G、H三處未點亮
  4. 選擇點亮E,站在E處發現有A和F,A已經點亮了
  5. 選擇點亮F,然後發現到頭了,視野中所有的燈都亮着。此時不能直接結束點亮工作。
  6. 選擇原路返回,並檢查每個頂點是不是還有未點亮的燈,如果燈全部都亮了則繼續返回
  7. 退回到D後,發現還有G、H沒亮
  8. 選擇點亮G,然後到H
  9. 點亮到H之後發現視野中A、G、D的燈全部都亮着,於是繼續返回,並檢查
  10. 退回路徑G-D-C-B-A,流程結束

其實看到這整個流程,我腦子裏第一想法是這不是個堆棧嘛,點亮一個就入棧一個,然後視野中全部點亮了就出棧。
僞代碼實現,採用遞歸方式
在這裏插入圖片描述

2、廣度優先搜索(Breadth First Search)

在這裏插入圖片描述
廣度優先搜索使用了隊列,大概步驟分爲:

  1. 先把1壓入隊列,然後做出隊操作,1出隊
  2. 把1直接相關的頂點,234567做入隊操作
  3. 然後出隊操作,2出隊
  4. 把2相關的頂點8,9做入隊操作
  5. 然後出隊操作,3出隊
  6. 把3相關的頂點10做入隊操作
  7. 然後依次出隊把34567相關的頂點做入隊操作
  8. 然後出隊…
  9. 後面省略,大概就是這麼個過程直到隊列裏沒有元素爲止

僞代碼實現 :

在這裏插入圖片描述

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