日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

拓普排序介绍

發布時間:2025/3/16 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 拓普排序介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

拓撲排序介紹

拓撲排序(Topological Order)是指,將一個有向無環圖(Directed Acyclic Graph簡稱DAG)進行排序進而得到一個有序的線性序列。

這樣說,可能理解起來比較抽象。下面通過簡單的例子進行說明!?
例如,一個項目包括A、B、C、D四個子部分來完成,并且A依賴于B和D,C依賴于D。現在要制定一個計劃,寫出A、B、C、D的執行順序。這時,就可以利用到拓撲排序,它就是用來確定事物發生的順序的。

在拓撲排序中,如果存在一條從頂點A到頂點B的路徑,那么在排序結果中B出現在A的后面。

?

拓撲排序的算法圖解

拓撲排序算法的基本步驟:

1.?構造一個隊列Q(queue) 和 拓撲排序的結果隊列T(topological);?
2.?把所有沒有依賴頂點的節點放入Q;?
3.?當Q還有頂點的時候,執行下面步驟:?
3.1?從Q中取出一個頂點n(將n從Q中刪掉),并放入T(將n加入到結果集中);?
3.2?對n每一個鄰接點m(n是起點,m是終點);?
3.2.1?去掉邊<n,m>;?
3.2.2?如果m沒有依賴頂點,則把m放入Q;?
注:頂點A沒有依賴頂點,是指不存在以A為終點的邊。

以上圖為例,來對拓撲排序進行演示。

第1步:將B和C加入到排序結果中。?
????頂點B和頂點C都是沒有依賴頂點,因此將C和C加入到結果集T中。假設ABCDEFG按順序存儲,因此先訪問B,再訪問C。訪問B之后,去掉邊<B,A>和<B,D>,并將A和D加入到隊列Q中。同樣的,去掉邊<C,F>和<C,G>,并將F和G加入到Q中。?
????(01) 將B加入到排序結果中,然后去掉邊<B,A>和<B,D>;此時,由于A和D沒有依賴頂點,因此并將A和D加入到隊列Q中。?
????(02) 將C加入到排序結果中,然后去掉邊<C,F>和<C,G>;此時,由于F有依賴頂點D,G有依賴頂點A,因此不對F和G進行處理。?
第2步:將A,D依次加入到排序結果中。?
????第1步訪問之后,A,D都是沒有依賴頂點的,根據存儲順序,先訪問A,然后訪問D。訪問之后,刪除頂點A和頂點D的出邊。?
第3步:將E,F,G依次加入到排序結果中。

因此訪問順序是:B -> C -> A -> D -> E -> F -> G

拓撲排序的代碼說明

拓撲排序是對有向無向圖的排序。下面以鄰接表實現的有向圖來對拓撲排序進行說明。

總結

以上是生活随笔為你收集整理的拓普排序介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。