定義:
應用:
有向圖來表示,圖中的頂點代表活動(子工程),圖中的有向邊代表活動的先後關係,即有向邊的起點的活動是終點活動的前序活動,只有當起點活動完成之後,其終點活動才能進行。通常,我們把這種頂點表示活動、邊表示活動間先後關係的有向圖稱做頂點活動網(activity on vertex network),簡稱aov網。即不應該帶有迴路,因為若帶有迴路,則回路上的所有活動都無法進行。
拓撲排序演算法(python):
v表示頂點:v=['a','b','c','d','e'],e表示有向邊:e=[('a','b'),('a','d'),('b','c'),('d','c'),('d','e'),('e','c')]
def toposort(vertex,edge):
def indegree0(vertex, edge):
'''刪除度為0的節點'''
if vertex==:
return none
tmpv=vertex[:]
for i in edge:
if i[1] in tmpv:
tmpv.remove(i[1])
if tmpv==:
return -1
for v in tmpv:
for i in range(len(edge)):
if v in edge[i]:
edge[i]='todel' #佔位,之後刪掉
if edge:
eset=set(edge)
eset.remove('todel')
edge[:]=list(eset)
if vertex:
for v in tmpv:
vertex.remove(v)
return tmpv
# 開始拓撲排序
result=
while true:
nodes=indegree0(vertex,edge)
if nodes==none:
break
if nodes==-1:
print('there\'s a circle.')
return none
result.extend(nodes)
return result
拓撲排序演算法
對許多資料結構教材實在不滿意,至少我是看不懂 至於拓撲排序演算法,教材上那些偽 真真教人頭暈。只寫了幾個struct結構,我根本看不出這是鄰接表。如果給出乙個清晰明了的圖,一切不就簡單了?總之,關鍵就是建立乙個鄰接表。然後利用這個表進行拓撲排序。邊表結點宣告 typedef struct edgen...
拓撲排序演算法
對乙個 有向無環圖 directed acyclic graph簡稱dag g進行拓撲排序,是將g中所有頂點排成乙個線性序列,使得圖中任意一對頂點u和v,乙個有向無環圖的拓撲序列不是唯一的 進行拓撲排序的演算法並不複雜 1 在有向圖中選乙個沒有前驅 入度為0 的頂點且輸出之 2 從圖中刪除該頂點及它...
拓撲排序演算法
拓撲排序的相關概念及思想參閱如下文章 資料結構圖之五 拓撲排序 brief header file private define maxvex 14 頂點數 define maxedge 20 邊數 typedef struct edgenode 邊表節點 edgenode typedef stru...