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

python實(shí)現(xiàn)拓?fù)渑判虻姆椒ú襟E

 更新時(shí)間:2024年03月20日 15:06:51   作者:liulanba  
拓?fù)渑判蚴菍τ邢驘o環(huán)圖進(jìn)行排序的一種算法,本文主要介紹了python實(shí)現(xiàn)拓?fù)渑判虻姆椒ú襟E,具有一定的參考價(jià)值,感興趣的可以了解一下

拓?fù)渑判蚴菍τ邢驘o環(huán)圖(DAG)進(jìn)行排序的一種算法,它可以將圖中的頂點(diǎn)排成一個(gè)線性序列,使得圖中的任意一條有向邊都從序列中的較早頂點(diǎn)指向較晚頂點(diǎn)。換句話說,如果圖中存在一條從頂點(diǎn)A到頂點(diǎn)B的有向邊,那么在拓?fù)渑判蛑许旤c(diǎn)A一定出現(xiàn)在頂點(diǎn)B之前。

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

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

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

開始拓?fù)渑判颍?br />取出隊(duì)列中的1號頂點(diǎn),并輸出:1
將1號頂點(diǎn)的鄰接頂點(diǎn)2號和3號的入度分別減1,得到入度為0的2號和3號頂點(diǎn),加入隊(duì)列:[2, 3]
取出隊(duì)列中的2號頂點(diǎn),并輸出:2
將2號頂點(diǎn)的鄰接頂點(diǎn)4號的入度減1,得到入度為0的4號頂點(diǎn),加入隊(duì)列:[3, 4]
取出隊(duì)列中的3號頂點(diǎn),并輸出:3
將3號頂點(diǎn)的鄰接頂點(diǎn)5號的入度減1,得到入度為1的5號頂點(diǎn),加入隊(duì)列:[4, 5]
取出隊(duì)列中的4號頂點(diǎn),并輸出:4
將4號頂點(diǎn)的鄰接頂點(diǎn)6號的入度減1,得到入度為0的6號頂點(diǎn),加入隊(duì)列:[5, 6]
取出隊(duì)列中的5號頂點(diǎn),并輸出:5
取出隊(duì)列中的6號頂點(diǎn),并輸出:6
完成拓?fù)渑判?,輸出結(jié)果為:[1, 2, 3, 4, 5, 6]。

from collections import defaultdict, deque

def topological_sort(graph):
    # 統(tǒng)計(jì)入度
    indegree = defaultdict(int)
    for node in graph:
        for neighbor in graph[node]:
            indegree[neighbor] += 1
    
    # 將入度為0的節(jié)點(diǎn)加入隊(duì)列
    queue = deque([node for node in graph if indegree[node] == 0])
    result = []
    
    # 拓?fù)渑判?
    while queue:
        node = queue.popleft()
        result.append(node)
        # 將該節(jié)點(diǎn)的鄰接節(jié)點(diǎn)的入度減1,并將入度為0的節(jié)點(diǎn)加入隊(duì)列
        for neighbor in graph[node]:
            indegree[neighbor] -= 1
            if indegree[neighbor] == 0:
                queue.append(neighbor)
    
    # 如果結(jié)果中的節(jié)點(diǎn)數(shù)等于圖中的節(jié)點(diǎn)數(shù),則拓?fù)渑判虺晒?
    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("拓?fù)渑判蚪Y(jié)果:", sorted_nodes)
else:
    print("圖中存在環(huán),無法進(jìn)行拓?fù)渑判?)

統(tǒng)計(jì)入度:
遍歷圖中的每個(gè)節(jié)點(diǎn),統(tǒng)計(jì)每個(gè)節(jié)點(diǎn)的入度,即指向該節(jié)點(diǎn)的邊的數(shù)量。
初始化:
將入度為0的節(jié)點(diǎn)加入一個(gè)隊(duì)列,作為拓?fù)渑判虻某跏脊?jié)點(diǎn)。
拓?fù)渑判颍?br />1.從隊(duì)列中取出一個(gè)節(jié)點(diǎn),并輸出到結(jié)果列表中。
2.將該節(jié)點(diǎn)的所有鄰接節(jié)點(diǎn)的入度減1。
3.如果某個(gè)鄰接節(jié)點(diǎn)的入度減為0,則將其加入隊(duì)列。
4.重復(fù)上述步驟直到隊(duì)列為空。
檢查:
如果結(jié)果列表中的節(jié)點(diǎn)數(shù)等于圖中的節(jié)點(diǎn)數(shù),則拓?fù)渑判虺晒?,否則圖中存在環(huán)。

到此這篇關(guān)于python實(shí)現(xiàn)拓?fù)渑判虻姆椒ú襟E的文章就介紹到這了,更多相關(guān)python 拓?fù)渑判騼?nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

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

    python?math模塊使用方法介紹

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

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

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

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

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

    對于Python的Django框架使用的一些實(shí)用建議

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

    Python迭代器Iterable判斷方法解析

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

    python怎么判斷素?cái)?shù)

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

    python db類用法說明

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

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

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

最新評論