Dijkstra和動態規劃

2021-09-01 12:22:44 字數 1154 閱讀 1110

如果v 在 u中:cdis[v] = dis[v]

如果v和u中某點u直連:cdis[v] =min(dis(u) + w(u,v))

其他情況:cdis[v] = inf

貪心+動態規劃,應該都是這個框架,沒有直接的for迴圈了

import heapq

import numpy as np

defdijkstra

(graph,start)

: pqueue =

(0.0

,start)

)#u:已知最短距離的集合

visit =

set(

)# 追蹤解

parent =

# dp陣列

distance =

distance[start]

=0.0

while pqueue:

dist = pair[0]

vertex = pair[1]

# 相當於以前的for迴圈

visit.add(vertex)

# 這裡我們只考慮直連的邊,非直連的邊為inf肯定進不了候選集

edges = graph[vertex]

for v in edges:

if v not

in visit:

if dist + graph[vertex]

[v]< distance[v]

:(dist + graph[vertex]

[v],v)

)# 更新dp陣列

distance[v]

= dist + graph[vertex]

[v] parent[v]

= vertex

return parent,distance

#%%

g =,'b':,

'c':

,'d':,

'e':

,'f':,

'g':

} i,j=dijkstra(g,

'a')

print i

print j

動態規劃,Dijkstra演算法,A 演算法的比較

動態規劃,dijkstra演算法,a 演算法的框架是相同的,不同點僅在於 推進點的選取 和 演算法終止條件 一,動態規劃 參見http blog.csdn.net iwantnon archive 2009 07 07 4329269.aspx 推進點選取 1 在粗獷的動態規劃演算法中 根本不進行選...

Dijkstra 旅遊規劃

有了一張自駕旅遊路線圖,你會知道城市間的高速公路長度 以及該公路要收取的過路費。現在需要你寫乙個程式,幫助前來諮詢的遊客找一條出發地和目的地之間的最短路徑。如果有若干條路徑都是最短的,那麼需要輸出最便宜的一條路徑。輸入格式 輸入說明 輸入資料的第1行給出4個正整數n m s d,其中n 2 n 50...

動態規劃之Dijkstra演算法求最短路徑

問題描述 王老師家住在a地,他要去學生b c d e f h家進行家訪,已知每個學生家之間的距離,現在求王老師家到每個學生家的最短路徑,好讓王老師做出計畫。思路分析 用圖的鄰接矩陣matrix表示各地之間的距離,a到j的最短路徑表示為dist j min 動態規劃的遞推公式 dist j 初始化為m...