У меня проблема с применением алгоритма Беллмана-Форда для 2D-массива (не для графика)
Входной массив имеет размеры m x n:
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] стоимостью приёма). В каждой комнате также может быть отрицательная стоимость, и нам нужно найти самый дешевый путь от Entry до выбранной комнаты и выйти.
Например, у нас есть этот массив комнат и стоимость:
1 5 6
2 -3 4
5 2 -8
И мы хотим пройти через комнату [3,2], s [3,2] = 4. Мы начинаем форму 5 [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);
}
}
Но как я могу затем прочитать стоимость выбора комнаты и из комнаты для выхода?