問題1:書P309 介紹了拓撲序的概念(topplogical order)html
有向圖沒有環路,且有一條從A到B的邊,則能夠把頂點A安排在頂點B以前。這種排列獲得的頂點次序成爲拓撲序。git
問題1解決方案:算法
首先,瞭解一下拓撲排序的概念。網絡
維基百科中:
在圖論中,由一個有向無環圖的頂點組成的序列,當且僅當知足下列條件時,稱爲該圖的一個拓撲排序(英語:Topological sorting)。
(1)每一個頂點出現且只出現一次;
(2)若A在序列中排在B的前面,則在圖中不存在從B到A的路徑。
也能夠定義爲:拓撲排序是對有向無環圖的頂點的一種排序,它使得若是存在一條從頂點A到頂點B的路徑,那麼在排序中B出如今A的後面。數據結構
還有一個關於拓撲序的定義:
學習
對於拓撲排序,即找到起始點,即入度等於0 ,的狀況下到 最終的點的檢索過程,可是其中圖中不能有環路,若是有環路的狀況下,將會出現入度都相互相等的狀況,這樣就會有點沒法輸出。測試
存在一個新的名詞,入度優化
以咱們書上的有向圖爲例:
D頂點入度爲2,出度爲1,度爲3。spa
因此拓撲排序也能夠用來檢驗有向圖中那個是否有環.net
拓撲排序的做用
這裏又要補充兩個概念:偏序和全序
全序:集合內任何一對元素在在這個關係下都是相互可比較的。
好比:有限長度的序列按字典序是全序的。最多見的是單詞在字典中是全序的。
偏序:有向圖中兩個頂點之間不存在環路,至於連通與否,是無所謂的。
全序:就是在偏序的基礎之上,有向無環圖中的任意一對頂點還須要有明確的關係(反映在圖中,就是單向連通的關係,注意不能雙向連通,那就成環了)。
意思就是講,一個不肯定的偏序關係經全序後就有一種肯定的前後順序了。
既然有前後,那麼拓撲排序的應用
問題2:對於書P313 圖15.7遍歷理解問題。書上給出了廣度優先遍歷的步驟和結果,那麼對於深度優先遍歷的步驟結果是怎樣的呢?
在以後,我又研究了一下深度遍歷的代碼,書上有這樣一句重要的話我忽略了。
圖的深度優先遍歷和廣度優先遍歷的惟一不一樣是,它使用的是棧而不是隊列來管理遍歷的。
因此,在一開始我就犯了一個錯誤,根據棧的性質——先進後出,那麼應該是從頂點8開始向下遍歷,而且一直到沒有鄰接頂點或者頂點已經被訪問過。也就是說,若是是一個環路,那麼他會從頭遍歷到尾,一直走到黑。
無錯題,優秀!
圖是數據結構中應用範圍是較爲普遍的,實現的方法也是多種多樣。代碼理解和實現的難度一樣是有的。有些邏輯也較爲複雜,須要潛心判斷和思考。
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 0/0 | 1/1 | 10/10 | |
第二週 | 610/610 | 1/2 | 20/30 | |
第三週 | 593/1230 | 1/3 | 18/48 | |
第四周 | 2011/3241 | 2/5 | 30/78 | |
第五週 | 956/4197 | 1/6 | 22/100 | |
第六週 | 2294/6491 | 2/8 | 20/120 | |
第七週 | 914/7405 | 1/9 | 20/140 | |
第八週 | 2366/9771 | 2/11 | 22/162 | |
第九周 | 1549/11320 | 1/12 | 22/184 |