拓撲排序 Python實現

2021-09-29 11:00:52 字數 1553 閱讀 8520

拓撲序:

如果圖中從v到w有一條有向路徑,則v一定排在w之前

aov(activity on vertex)

如果有合理的拓撲序,則一定是有向無環圖(directed acyclic graph, dag)

:# 遍歷圖,得到indegree

cnt = counter(

)# 使用python內建的計數器

for val in flatten(

list

(graph.values())

):# 拿到所有的鄰接點因為是每乙個結點的鄰接點是list儲存,所以要展平

cnt[val]+=1

indegree =

# 將所有入度為0的頂點入列

queue = deque(

) zero_indeg =

[node for node in graph if indegree[node]==0

] queue.extend(zero_indeg)

# 拓撲排序

toporder =

list()

while

len(queue)

: node = queue.popleft(

)for adj in graph[node]

:# 從圖中拿走這一點,就是把它的鄰接點的入度-1

indegree[adj]-=1

if indegree[adj]==0

:# 上一步操作之後,還要對圖中的結點進行入度判斷

iflen

(toporder)

!=len

(graph)

:# 最後結果不包含全部的點,則圖不連通

return

false

else

:return

true

[1, 2, 4, 8, 3, 13, 5, 9, 7, 6, 10, 11, 12, 15, 14]

true

python 拓撲排序 Python 拓撲排序

python 拓撲排序 在圖論中,由乙個有向無環圖的頂點組成的序列,當且僅當滿足下列條件時,稱為該圖的乙個拓撲排序 英語 topological sorting 每個頂點出現且只出現一次 若a在序列中排在b的前面,則在圖中不存在從b到a的路徑。print 拓撲排序結果 g.topologicalso...

python 排序 拓撲排序

在電腦科學領域中,有向圖的拓撲排序是其頂點的先行排序,對於每個從頂點u到頂點v的有向邊uv,在排序的結果中u都在v之前。如果圖是有向無環圖,則拓撲排序是可能的 為什麼不說一定呢?圖論 是組合數學的乙個分支,它和其他分支比如 群論 拓撲學 矩陣論有著密切的關係。圖是圖論的主要研究物件。圖是由若干給定的...

拓撲排序 C實現

接著上一次的c 實現,這次用c語言寫一遍。主要是多了棧stack的實現部分。參考了 資料結構 教材。如下 include include include include 圖的鄰接表儲存表示 define max vertex num 20 typedef struct arcnode arcnode...