算法_Dijkstra_Python

本文用到的包

import networkx as nx

考慮如下網(wǎng)絡


流網(wǎng)絡示意圖
流網(wǎng)絡示意圖

這個網(wǎng)絡的構(gòu)建代碼是

G=nx.DiGraph()
G.add_edge(0,1,weight=80)
G.add_edge(1,2,weight=50)
G.add_edge(1,3,weight=30)
G.add_edge(3,2,weight=10)
G.add_edge(2,4,weight=20)
G.add_edge(2,5,weight=30)
G.add_edge(4,5,weight=10)
G.add_edge(5,3,weight=5)
G.add_edge(2,6,weight=10)
G.add_edge(4,6,weight=10)
G.add_edge(3,6,weight=25)
G.add_edge(5,6,weight=35)

可視化繪制使用了Processing,制圖代碼在這里。

定義如下函數(shù)

def Dijkstra(G,start,end):
    RG = G.reverse(); dist = {}; previous = {}
    for v in RG.nodes():
        dist[v] = float('inf')
        previous[v] = 'none'
    dist[end] = 0
    u = end
    while u!=start:
        u = min(dist, key=dist.get)           
        distu = dist[u]
        del dist[u]
        for u,v in RG.edges(u):
            if v in dist:
                alt = distu + RG[u][v]['weight']
                if alt < dist[v]:
                    dist[v] = alt
                    previous[v] = u
    path=(start,)
    last= start
    while last != end:
        nxt = previous[last]
        path += (nxt,)
        last = nxt
    return path

使用這個函數(shù)尋找0與6之間的最小權(quán)重路徑

Dijkstra(G,0,6)

其結(jié)果是

(0, 1, 3, 2, 6)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,094評論 25 709
  • 題圖來自: github本文主要介紹了PrettyTensor,用來快速構(gòu)建神經(jīng)網(wǎng)絡。當然,原文寫于16年,現(xiàn)在有...
    Kimichen7764閱讀 1,767評論 0 1
  • 介紹 先前的教程展示了一個簡單的線性模型,對MNIST數(shù)據(jù)集中手寫數(shù)字的識別率達到了91%。 在這個教程中,我們會...
    Kimichen7764閱讀 1,716評論 0 7
  • 最近一直生病,感冒、發(fā)燒、流鼻涕、嗓子啞掉,講不出話,整個人脆弱的不行,好久沒有動靜的扁桃體也發(fā)炎了。而沒...
    鈺小寶閱讀 1,041評論 0 3
  • 時間:公元2017年7月23周日 能量世界1054天 記錄者:陳釧 前言:最近有很多次都想記錄自己每天的軌跡,...
    陳小釧閱讀 470評論 0 0

友情鏈接更多精彩內(nèi)容