知識點 - 樹的樹邊、前向邊、後向邊

知識點 - 樹的樹邊、前向邊、後向邊

解決問題類型:

圖論構造、圖論性質

實現

樹邊,前向邊,後向邊,橫叉邊,應該說,不是一個圖本身有的概念,應該是圖進行DFS時纔有的概念。圖進行DFS會得到一棵DFS樹(森林),在這個樹上 纔有了這些概念。對圖進行DFS,可以從任意的頂點開始,遍歷的方式也是多樣的,所以不同的遍歷會得到不同的DFS樹,進而產生不同的樹邊,前向邊,後向 邊,橫叉邊。所以這4種邊,是一個相對的概念。
在圖的遍歷中,往往設置了一個標記數組vis的bool值來記錄頂點是否被訪問過。但有些時候需要改變vis值的意義。令vis具有3種值並表示3種不同含義
vis = 0,表示該頂點沒沒有被訪問
vis = 1,表示該頂點已經被訪問,但其子孫後代還沒被訪問完,也就沒從該點返回
vis = 2,,表示該頂點已經被訪問,其子孫後代也已經訪問完,也已經從該頂點返回
可以vis的3種值表示的是一種順序關係和時間關係

《算法導論》334頁有這4種邊的準確定義,在此不累述
DFS過程中,對於一條邊u->v
vis[v] = 0,說明v還沒被訪問,v是首次被發現,u->v是一條樹邊
vis[v] = 1,說明v已經被訪問,但其子孫後代還沒有被訪問完(正在訪問中),而u又指向v?說明u就是v的子孫後代,u->v是一條後向邊,因此後向邊又稱返祖邊
vis[v] = 2 ,z說明v已經被訪問,其子孫後代也已經全部訪問完,u->v這條邊可能是一條橫叉邊,或者前向邊

注意:樹邊,後向邊,前向邊,都有祖先,後裔的關係,但橫叉邊沒有,u->v爲橫叉邊,說明在這棵DFS樹中,它們不是祖先後裔的關係它們可能是兄弟關係,堂兄弟關係,甚至更遠的關係,如果是dfs森林的話,u和v甚至可以在不同的樹上

在很多算法中,後向邊都是有作用的,但是前向邊和橫叉邊的作用往往被淡化,其實它們沒有太大作用。

下面上一張圖:

img

樹邊 Tree Edge
橫叉邊 Cross Edge
前向邊 Forward Edge
橫叉邊 Cross Edge
前向邊 Forward Edge
後向邊 Back Edge

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