日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

有向无环图拓扑排序(python实现)

發(fā)布時(shí)間:2024/2/28 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 有向无环图拓扑排序(python实现) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

問(wèn)題:有向無(wú)環(huán)圖的拓?fù)渑判?/h2>

題目描述
由某個(gè)集合上的一個(gè)偏序得到該集合上的一個(gè)全序,這個(gè)操作被稱為拓?fù)渑判?。偏序和全序的定義分別如下:
若集合X上的關(guān)系R是自反的、反對(duì)稱的和傳遞的,則稱R是集合X上的偏序關(guān)系。
設(shè)R是集合X上的偏序,如果對(duì)每個(gè)x,y∈X必有xRy或yRx,則稱R是集合X上的全序關(guān)系。
由偏序定義得到拓?fù)溆行虻牟僮鞅闶峭負(fù)渑判颉?br /> 拓?fù)渑判虻牧鞒倘缦?#xff1a;

  • 在有向圖中選一個(gè)沒(méi)有前驅(qū)的頂點(diǎn)并且輸出之;
  • 從圖中刪除該頂點(diǎn)和所有以它為尾的弧。
  • 重復(fù)上述兩步,直至全部頂點(diǎn)均已輸出,或者當(dāng)前圖中不存在無(wú)前驅(qū)的頂點(diǎn)為止。后一種情況則說(shuō)明有向圖中存在環(huán)。
    采用鄰接表存儲(chǔ)有向圖,并通過(guò)棧來(lái)暫存所有入度為零的頂點(diǎn),可以描述拓?fù)渑判虻乃惴ㄈ缦?#xff1a;

    在本題中,讀入一個(gè)有向圖的鄰接矩陣(即數(shù)組表示),建立有向圖并按照以上描述中的算法判斷此圖是否有回路,如果沒(méi)有回路則輸出拓?fù)溆行虻捻旤c(diǎn)序列。

    輸入
    輸入的第一行包含一個(gè)正整數(shù)n,表示圖中共有n個(gè)頂點(diǎn)。其中n不超過(guò)50。
    以后的n行中每行有n個(gè)用空格隔開(kāi)的整數(shù)0或1,對(duì)于第i行的第j個(gè)整數(shù),如果為1,則表示第i個(gè)頂點(diǎn)有指向第j個(gè)頂點(diǎn)的有向邊,0表示沒(méi)有i指向j的有向邊。當(dāng)i和j相等的時(shí)候,保證對(duì)應(yīng)的整數(shù)為0。
    輸出
    如果讀入的有向圖含有回路,請(qǐng)輸出“ERROR”,不包括引號(hào)。
    如果讀入的有向圖不含有回路,請(qǐng)按照題目描述中的算法依次輸出圖的拓?fù)溆行蛐蛄?#xff0c;每個(gè)整數(shù)后輸出一個(gè)空格。
    請(qǐng)注意行尾輸出換行。
    樣例輸入
    4
    0 1 0 0
    0 0 1 0
    0 0 0 0
    0 0 1 0
    樣例輸出
    3 0 1 2

    n=0 G=[[] for i in range(100)] inDegree=[0]*100 def topologicalSort():global n,G,inDegreelist=[]list_1=[]num=0for i in range(0,n):if inDegree[i]==0:list.append(i)while len(list)!=0:t=list[-1]list_1.append(t)list.pop(-1)for i in range(len(G[t])):v=G[t][i]inDegree[v]-=1if inDegree[v]==0:list.append(v)G[t].clear()num+=1if num==n:for i in list_1:print(i,end=' ')else:print("ERROR") if __name__=='__main__':n = int(input())for i in range(0, n):ar = input()b = ar.split(' ')graph = [int(i) for i in b]for j in range(len(graph)):if graph[j] == 1 and i!=j:inDegree[j]+=1G[i].append(j)topologicalSort()print()

    總結(jié)

    以上是生活随笔為你收集整理的有向无环图拓扑排序(python实现)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。