請問我想用C程式寫出Bellman-Ford最短路徑演算法..但我查了好多資料和書本..這個演算法的資料真的好少..只有Floyd這個演算法比較常見...我目前只寫的出Floyd演算法的...想請問有人會用C程式寫出Bellman-Ford最短路徑演算法嗎?
(有回答出我的問題的第一位回答者..我會立刻選你做最佳解答!)
急問!20點!要更多點也行!
月光論壇 |
HOME |
急問..用C程式寫出Bellman-Ford最短路徑演算法 |
| UP TO DATE BLOG |
| LINK BLOG |
| Powered by 月光論壇© 2005-2008 |
先定代號XXX代表無限大
input:
n, 節點的數目
V,節點的集合
E,邊的集合
(u, v),節點u到節點v的邊
w,路徑長度的函數,w(u, v)代表點u到點v的距離,假使u到v沒有邊的話則
w(u,v) = XXX
s,起始節點
程式:
===============================================
for each u in V
d[u] = XXX
d[s] = 0
for i = 1 to n - 1
do for each edge (u,v) in E
do if d[v] > d[u] + w(u, v)
d[v] = d[u] + w(u, v)
for each edge(u, v) in E
do if d[v] > d[u] + w(u, v)
then return false
return true
===============================================
程式結束後d[v]代表s到v的最短距離,如果程式回傳值是false代表input含有路徑長為負的cycle
這個演算法的好處是有邊長為負的邊也可以使用,而且可以偵測是否含有負的迴圈