前面都是邊的權值是正的情況,如果乙個圖包含負權值的環,那麼最短路徑可能不存在。而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.最優子結構性質 問題的最優解包含了子問題的最優解。貪心演算法的基本思想 找出整體當中每個小的區域性的最優解,並且將所有的這...