貪心演算法之Bellman Ford

2021-06-10 14:35:03 字數 1921 閱讀 8822

前面都是邊的權值是正的情況,如果乙個圖包含負權值的環,那麼最短路徑可能不存在。而bellman-ford演算法:從源

s∈v到所有

v∈v找到所有的最短路徑的長度或者檢測是否有乙個負環路存在。

演算法如下:

演算法的前面還是和dijkstra一樣的,只是在後面多了乙個檢測負權環的

for迴圈,即對所有的邊鬆弛完畢後,開始檢測如果

d[v]>d[u]+w(u,v)

任然存在那麼顯然有乙個負權環

**如下:

for line in datafile.readlines(): #其實就是dijkstra演算法中的對邊進行鬆弛

[frm, to, wei] = line.split("\t")

frm = int(frm)-1

to = int(to)-1

wei = int(wei)

if (dist[frm] + wei < dist[to]):

dist[to] = dist[frm] + wei

pre[to] = frm

datafile.close()

for i in range(len(dist)):

print (i, dist[i])

datafile = open('e:\\drg.data', 'r')

datafile.readline()

for line in datafile.readlines(): #對負權環進行檢測

[frm, to, wei] = line.split("\t")

frm = int(frm)-1

to = int(to)-1

wei = int(wei)

if (dist[frm] + wei < dist[to]):

print ("graph contains a neg-wei cycle")

datafile.close()

其中drg.data資料組織形式如下:

兩個數用tab鍵隔開

以上**:

這是我見過的比較簡潔的**,謝謝鏈結中的博主。

貪心演算法之裝箱

貪心演算法之裝箱問題 有若干個體積為v的箱子,有n個物品體積為v1,v2,v3,v4。要求 將所有物品裝入箱子中,使開啟的箱子盡可能少。演算法描述 把所有物品按體積降序排序,每次取出乙個物品 該物品為當前體積最大的物品 遍歷所有已開啟箱子,將該箱子放入乙個較早開啟的箱子,若沒有箱子能放下,則開啟乙個...

貪心演算法之prim演算法

演算法思想 首先置s 然後只要s是v的真子集,就做如下的貪心選擇 選擇滿足條件i屬於s,j屬於v s,且edge i j 是最小的邊,就將其頂點j新增到s中,這個過程一直進行到s v時為止,在這個過程中,選取到的所有邊恰好構成g的一顆最小生成樹。include define infinity 500...

ACM演算法之貪心演算法

acm演算法之貪心演算法 一般使用貪心演算法要滿足兩個條件 a.貪心選擇性質 可通過做區域性最優 貪心 選擇來達到全域性最優解。貪心選擇性質 這是貪心演算法與動態規劃的區別 b.最優子結構性質 問題的最優解包含了子問題的最優解。貪心演算法的基本思想 找出整體當中每個小的區域性的最優解,並且將所有的這...