請問我想用C程式寫出Bellman-Ford最短路徑演算法..但我查了好多資料和書本..這個演算法的資料真的好少..只有Floyd這個演算法比較常見...我目前只寫的出Floyd演算法的...想請問有人會用C程式寫出Bellman-Ford最短路徑演算法嗎?
(有回答出我的問題的第一位回答者..我會立刻選你做最佳解答!)
急問!20點!要更多點也行!
2006-08-01 14:56:59 · 2 個解答 · 發問者 Y3632739742 2 in 電腦與網際網路 ➔ 程式設計
我是要讀檔的~我將我的Floyd程式寄給您~我希望跟我的程式寫的一樣(因為我要讀檔..我已經寫好了)只是變成Bellman-Ford的方法..不知道您可以幫我修改看看嗎?我將我的程式寄給您!謝謝您了~如果您願意撥空解答~我會立刻選您為最佳解答!
2006-08-01 20:08:29 · update #1
printf("\n\nk=1:\n");//先印出不經過任何點的路徑長度
k=1;
for(i=0; i
2006-08-01 20:20:35 · update #2
for(i=0;i
2006-08-01 20:22:04 · update #3
if(r!=i) //列不等於n..因為跟n有關的行和列值都不變
{
col=j,row=i;
for(c=0;c
2006-08-01 20:23:02 · update #4
else//除了左上至右下的對角線
{
if(matrix[col][row]!='9999')//不可以是走不到的
{
path+=matrix[col][row];//將路徑長度存到path
if(row!=r)//走到目的地就結束
{
col=row;
row=r;
}
else
{
c=count;
}
}
2006-08-01 20:23:22 · update #5
else//走不到的就立刻結束
{
c=count;
}
}
}
if(matrix[col][row]!='9999'&&path
2006-08-01 20:23:43 · update #6
printf("k=%d(最短路徑解):\n",(count-1));//印出最後的結果的矩陣
for(i=0; i
2006-08-01 20:24:05 · update #7
scanf("%c",&c);//延遲執行畫面以方便檢視
system("pause");
return 0;
2006-08-01 20:24:20 · update #8
已經將我寫的程式碼主要部分po上來囉~請問有辦法幫我改成Bellman-Ford的方法嗎?若可以的話我會立刻選您為最佳解答!真的很感謝^^
2006-08-01 20:26:04 · update #9
因為你沒有給詳細的條件,所以我寫虛擬碼,如果有需要詳細的程式碼的話我再補充
先定代號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
這個演算法的好處是有邊長為負的邊也可以使用,而且可以偵測是否含有負的迴圈
2006-08-02 03:00:19 補充:
我的信箱:mimi9126@yahoo.com.tw
2006-08-01 19:03:22 · answer #1 · answered by YuFan 2 · 0⤊ 0⤋
http://en.wikipedia.org/wiki/Bellman-Ford
它能不能解決你的問題?
2006-08-01 18:00:56 · answer #2 · answered by ? 7 · 0⤊ 0⤋