圖的深度遍歷和廣度遍歷

理論部分

圖的深度遍歷和廣度遍歷都不算很難像極了二叉樹的前序遍歷和層序遍歷,以下面的圖,能夠用右邊的鄰接矩陣進行表示,假設以頂點0開始對整幅圖進行遍歷的話,兩種遍歷方式的思想以下:blog

1. 深度優先遍歷(depthFirstSearch—DFS)

由初始頂點開始,沿着一條道一直走,當走到走不動的時候,再回來走一條能夠走的通的道,而後再繼續往下走,直到走不動,再回來…對應於本圖來講就是從0開始往前走,到1----->而後從1再往前走,到5----->從5再往前走,到4------->到了這裏發現沒路可走了------>就往回走,回到5,看5還有沒有路,發現沒路----->則回到1,看1有沒有路,也沒有----->再回到0,看0有沒有路,發現有------>則由0走到3----->走到這裏發現又沒有路了----->再往回走,走到0,看0還有沒有路,發現有----->則由0走到4,可是4已經被遍歷過了,因此再回到0,結束此次遍歷過程隊列

可是這時候還有一個2沒有遍歷啊,該怎麼辦呢?以前咱們是直接就默認從0開始進行往下遍歷了,可是從0開始遍歷沒有一條路能夠走到2,爲了不這種狀況,咱們必須得從每個頂點開始遍歷,這樣才能避免漏掉這種只出不進的頂點二叉樹

因而深度優先遍歷獲得的遍歷結果應爲:0 1 5 4 3 2遍歷

2.廣度優先遍歷(broadFirstSearch—BFS)

廣度遍歷我以爲理解起來更簡單,就是一層一層的進行遍歷,好比說以0頂點開始,0往下指向1,3,4,遍歷的時候就先遍歷0,而後再遍歷它下一層的1,3,4------>而後分別遍歷1,3,4的下一層---->而1,3,4只有1有下一層,則遍歷1的下一層5,同理最後遍歷2im

即廣度優先遍歷獲得的遍歷結果應爲:0 1 3 4 5 2img

和二叉樹的層序遍歷同樣,圖的廣度遍歷也用到了隊列,對於下圖而言,先將0放入隊首----->而後遍歷0並將0從隊列中取出,同時將0的鄰接點1,3,4入隊,這樣隊首就是1----->而後將1出隊,並將1的鄰接點入隊(這裏只有5), 這樣隊首就是3----->而後將3彈出並將3的鄰接點入隊(這裏沒有),這樣隊首就是4----->而後將4彈出並將4的鄰接點入隊(這裏沒有),隊首就是從1入隊的1的第一個鄰接點(這裏是5)---->而後將5彈出----->直到隊列爲空這樣就完成了由定點0開始的廣度優先遍歷co

相關文章
相關標籤/搜索