演算法 拓撲排序

2021-07-11 11:12:21 字數 1213 閱讀 3088

定義:

應用:

有向圖來表示,圖中的頂點代表活動(子工程),圖中的有向邊代表活動的先後關係,即有向邊的起點的活動是終點活動的前序活動,只有當起點活動完成之後,其終點活動才能進行。通常,我們把這種頂點表示活動、邊表示活動間先後關係的有向圖稱做頂點活動網(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...