我有一个问题,施加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