我有一個問題,施加Bellman-Ford算法到2D陣列(未於圖)在2D陣列Belman-Ford算法
輸入陣列具有米 X Ñ尺寸:
s[1,1] s[1,2] ... s[1,n] -> Exit
s[2,1] s[2,2] ... s[2,n]
...
Entry -> s[m,1] s[m,2] ... s[m,n]
它是房間一樣(每個入口是一個房間s [x,y]入場費)。每個房間也可能有負成本,我們必須找到從進入選擇房間和退出最便宜的路徑。
例如,我們已經有了這個數組客房和費用:
1 5 6
2 -3 4
5 2 -8
我們希望能夠走過去室[3,2],S [3,2] = 4。我們開始形式在[1,3],必須走過去[3,2]我們去[3,3]之前。
而我的問題是,在貝爾曼福特算法中實現它的最佳方法是什麼?我知道Dijkstry算法不會因負成本而工作。
對於[0,maxHeight]中的每個房間是否正確並放鬆所有鄰居?像這樣:
for (int i = height-1; i >= 0; --i) {
for (int j = 0; j < width; ++j) {
int x = i;
int y = j;
if (x > 0) // up
Relax(x, y, x - 1, y);
if (y + 1 < width) // right
Relax(x, y, x, y + 1);
if (y > 0) // left
Relax(x, y, x, y - 1);
if (x + 1 < height) // down
Relax(x, y, x + 1, y);
}
}
但是,我該如何讀取費用選擇房間,從房間到退出?
如果您想知道最終的最優成本,您必須保存最佳路徑。你已經知道你要去哪個方向(你的if語句),所以只要保存這些信息,而你去...我不認爲你可以使用你的2d數組來保存這些數據,你必須使用另一個2d數組或者只是添加字段到當前的二維數組。你基本上需要保留前一個值 – LiranBo
二維數組是一種表示圖形的方法,它被稱爲鄰接矩陣。 – turingcomplete
@turingcomplete鄰接矩陣可以存儲在二維數組中,但不是所有的二維數組都是鄰接矩陣。 * s *是**不是**圖的鄰接矩陣。它甚至不是方形的。 – Phillip