欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python實現(xiàn)拓撲排序的方法步驟

 更新時間:2024年03月20日 15:06:51   作者:liulanba  
拓撲排序是對有向無環(huán)圖進行排序的一種算法,本文主要介紹了python實現(xiàn)拓撲排序的方法步驟,具有一定的參考價值,感興趣的可以了解一下

拓撲排序是對有向無環(huán)圖(DAG)進行排序的一種算法,它可以將圖中的頂點排成一個線性序列,使得圖中的任意一條有向邊都從序列中的較早頂點指向較晚頂點。換句話說,如果圖中存在一條從頂點A到頂點B的有向邊,那么在拓撲排序中頂點A一定出現(xiàn)在頂點B之前。

統(tǒng)計入度:
對圖中的每個頂點,統(tǒng)計其入度,即指向它的邊的數(shù)量。
初始化:
將入度為0的頂點加入一個隊列,作為初始節(jié)點。
拓撲排序:
1.從隊列中取出一個頂點,并輸出。
2.將該頂點的所有鄰接頂點的入度減1。
3.如果某個鄰接頂點的入度減為0,則將其加入隊列。
4.重復(fù)步驟3,直到隊列為空。
檢查:
如果輸出的頂點數(shù)等于圖中的頂點數(shù),則拓撲排序成功,否則圖中存在環(huán)。
假設(shè)有以下有向圖:

 1  →  2  →  4
 ↓  ↗ ↓  ↗ ↓
 3    5  →  6

首先統(tǒng)計每個頂點的入度:
1號頂點入度為0
2號頂點入度為1
3號頂點入度為1
4號頂點入度為1
5號頂點入度為2
6號頂點入度為1
將入度為0的頂點加入隊列:[1]

開始拓撲排序:
取出隊列中的1號頂點,并輸出:1
將1號頂點的鄰接頂點2號和3號的入度分別減1,得到入度為0的2號和3號頂點,加入隊列:[2, 3]
取出隊列中的2號頂點,并輸出:2
將2號頂點的鄰接頂點4號的入度減1,得到入度為0的4號頂點,加入隊列:[3, 4]
取出隊列中的3號頂點,并輸出:3
將3號頂點的鄰接頂點5號的入度減1,得到入度為1的5號頂點,加入隊列:[4, 5]
取出隊列中的4號頂點,并輸出:4
將4號頂點的鄰接頂點6號的入度減1,得到入度為0的6號頂點,加入隊列:[5, 6]
取出隊列中的5號頂點,并輸出:5
取出隊列中的6號頂點,并輸出:6
完成拓撲排序,輸出結(jié)果為:[1, 2, 3, 4, 5, 6]。

from collections import defaultdict, deque

def topological_sort(graph):
    # 統(tǒng)計入度
    indegree = defaultdict(int)
    for node in graph:
        for neighbor in graph[node]:
            indegree[neighbor] += 1
    
    # 將入度為0的節(jié)點加入隊列
    queue = deque([node for node in graph if indegree[node] == 0])
    result = []
    
    # 拓撲排序
    while queue:
        node = queue.popleft()
        result.append(node)
        # 將該節(jié)點的鄰接節(jié)點的入度減1,并將入度為0的節(jié)點加入隊列
        for neighbor in graph[node]:
            indegree[neighbor] -= 1
            if indegree[neighbor] == 0:
                queue.append(neighbor)
    
    # 如果結(jié)果中的節(jié)點數(shù)等于圖中的節(jié)點數(shù),則拓撲排序成功
    if len(result) == len(graph):
        return result
    else:
        return None

# 測試
graph = {
    '1': ['2', '3'],
    '2': ['4', '5'],
    '3': ['5'],
    '4': ['6'],
    '5': ['6'],
    '6': []
}

sorted_nodes = topological_sort(graph)
if sorted_nodes:
    print("拓撲排序結(jié)果:", sorted_nodes)
else:
    print("圖中存在環(huán),無法進行拓撲排序")

統(tǒng)計入度:
遍歷圖中的每個節(jié)點,統(tǒng)計每個節(jié)點的入度,即指向該節(jié)點的邊的數(shù)量。
初始化:
將入度為0的節(jié)點加入一個隊列,作為拓撲排序的初始節(jié)點。
拓撲排序:
1.從隊列中取出一個節(jié)點,并輸出到結(jié)果列表中。
2.將該節(jié)點的所有鄰接節(jié)點的入度減1。
3.如果某個鄰接節(jié)點的入度減為0,則將其加入隊列。
4.重復(fù)上述步驟直到隊列為空。
檢查:
如果結(jié)果列表中的節(jié)點數(shù)等于圖中的節(jié)點數(shù),則拓撲排序成功,否則圖中存在環(huán)。

到此這篇關(guān)于python實現(xiàn)拓撲排序的方法步驟的文章就介紹到這了,更多相關(guān)python 拓撲排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python下使用Trackbar實現(xiàn)繪圖板

    Python下使用Trackbar實現(xiàn)繪圖板

    這篇文章主要為大家詳細介紹了Python下使用Trackbar實現(xiàn)繪圖板,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • Python讀寫Redis數(shù)據(jù)庫操作示例

    Python讀寫Redis數(shù)據(jù)庫操作示例

    Redis是一個開源的非關(guān)系型數(shù)據(jù)庫,它采用C語言編寫,是一個key-value存儲系統(tǒng),它存儲的value類型很多,包括string(字符串),list(鏈表),set(集合),zset(有序集合),hash(哈希)
    2014-03-03
  • python?math模塊使用方法介紹

    python?math模塊使用方法介紹

    math庫是python的內(nèi)置數(shù)學類函數(shù)庫,支持整數(shù)和浮點數(shù)運算,math模塊下的函數(shù),返回值均為浮點數(shù),除非有說明,math模塊提供類似C語言標準定義的數(shù)學函數(shù)
    2022-08-08
  • Pytorch技法之繼承Subset類完成自定義數(shù)據(jù)拆分

    Pytorch技法之繼承Subset類完成自定義數(shù)據(jù)拆分

    這篇文章主要介紹了Pytorch技法之繼承Subset類完成自定義數(shù)據(jù)拆分,下文我們介紹一些下面是加載內(nèi)置訓練數(shù)據(jù)集的常見操作,需要的小伙伴可以參考一下
    2022-02-02
  • python模擬enum枚舉類型的方法小結(jié)

    python模擬enum枚舉類型的方法小結(jié)

    這篇文章主要介紹了python模擬enum枚舉類型的方法,實例總結(jié)了python模擬enum枚舉類型的相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • 對于Python的Django框架使用的一些實用建議

    對于Python的Django框架使用的一些實用建議

    這篇文章主要介紹了對于Python的Django框架使用的一些實用建議,包括一些優(yōu)秀模塊的介紹,要的朋友可以參考下
    2015-04-04
  • Python迭代器Iterable判斷方法解析

    Python迭代器Iterable判斷方法解析

    這篇文章主要介紹了Python迭代器Iterable判斷方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • python怎么判斷素數(shù)

    python怎么判斷素數(shù)

    在本篇文章里小編給大家整理了關(guān)于python判斷素數(shù)的方法和代碼,需要的朋友們可以學習下。
    2020-07-07
  • python db類用法說明

    python db類用法說明

    這篇文章主要介紹了python db類用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Python 實現(xiàn)RSA加解密文本文件

    Python 實現(xiàn)RSA加解密文本文件

    這篇文章主要介紹了Python 實現(xiàn)RSA加解密文本文件的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12

最新評論