Python關於拓撲排序知識點講解

2022-09-29 17:54:14 字數 2010 閱讀 7926

對乙個有向無環圖(directed acyclic graph簡稱dag)g進行拓撲排序,是將g中所有頂點排成乙個線性序列,使得圖中任意一對頂點u和v,若邊(u,v)∈e(g),則u**性序列**現在v之前。

通常,這樣的線性序列稱為滿足拓撲次序(topologicalwww.cppcns.com order)的序列,簡稱拓撲序列。簡單的說,由某個集合上的乙個偏序得到該集合上的乙個全序,這個操作稱之為拓撲排序。

在圖論中,由乙個有向無環圖的頂點組成的序列,當且僅當滿足下列條件時,稱為該圖的乙個拓撲排序(英語:topological sorting):

例項**

from collections import dejjtuaydjfaultdict

class graph:

def __init__(self,vertices):

self.graph = defaultdict(list)

self.v = vertices

def addedge(self,u,v):

self.graph[u].append(v)

def topologicalsortutil(self,v,visited,stack):

visited[v] = true

for i in self.graph[v]www.cppcns.com:

if visited[i] == false:

self.topolog程式設計客棧icalsortutil(i,visited,stack)

stack.insert(0,v)

def topologicalsort(self):

visited = [false]*self.v

stack =

for i in range(self.v):

if visited[i] == false:

self.topologicalsortutil(i,visited,stack)

print (stack)

g= graph(6)

g.addedge(5, 2);

g.addedge(5, 0);

g.addedge(4, 0);

g.addedge(4, 1);

g.addedge(2, 3);

g.addedge(3, 1);

print ("拓撲排序結果:")

g.topologicalsort()

執行以上**輸出結果為:

拓撲排序結果:

[5, 4, 2, 3, 1, 0]

例項擴充套件:

def toposort(graph):

in_degrees = dict((u,0) for u in graph) #初始化所有頂點入度為0

vertex_num = len(in_degrees)

for u in graph:

for v in graph[u]:

in_degrees[v] += 1 #計算每個頂點的程式設計客棧入度

q = [u for u in in_degrees if in_degrees[u] == 0] # 篩選入度為0的頂點

seq =

while q:

u = q.pop() #預設從最後乙個刪除

seq.append(u)

for v in graph[u]:

in_degrees[v] -= 1 #移除其所有指向

if in_degrees[v] == 0:

q.append(v) #再次篩選入度為0的頂點

if len(seq) == vertex_num: #如果迴圈結束後存在非0入度的頂點說明圖中有環,不存在拓撲排序

return seq

else:

print("there's a circle.")

g =

print(toposort(g))

輸出結果:

['a', 'e', 'c', 'b', 'd']

知識點 8 4 拓撲排序與關鍵路徑

總目錄 8 圖論 8.4 拓撲排序與關鍵路徑 前言 想起當年參加 ctsc 時 dp 王 zed 用拓撲序 dp 過了一道題直接一飛沖天,而一旁的蒟蒻拿了個 10 分 gg。子目錄列表 1 dag 與 aov 網 2 拓撲排序 3 aoe 網與關鍵路徑 8.4 拓撲排序與關鍵路徑 1 dag 與 a...

關於python的知識點

一 python函式的特點 1 代表執行單獨的操作,2 採用零個或多個引數作為輸入,3 返回值 可能是復合物件 作為輸出。二 python函式round的解釋 在round的函式,如果距離兩邊一樣遠,會保留到偶數的一邊。三 python正規表示式匹配反斜槓 為什麼是 或是 r 呢?因為在正規表示式中...

python大一知識點 python知識點複習

放假歸來,這幾天複習了一下好久不用的python,總結了一下知識點。語法基礎tuple與list的異同都由多個元素組成 tuple由 組成,list由組成 tuple不可變,list可變 tuple表示的是一種結構,而list表示的是多個事物的集合 tuple操作比list快 字串用法要點 轉義符和...