拓撲序:
如果圖中從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...