Задача на двумерное динамическое программирование
Начала изучать динамическое программирование. Есть задача: поле NxM, шар может двигаться вверх, вниз, влево и вправо. Начинает свой путь из клетки [0][0], а заканчивает в [N-1][M-1]. На вход принимается двумерный массив который заполнен неотрицательными числами. Необходимо добраться из начально клетки до конечной и собрать минимальную сумму чисел. Алгоритм сам вроде поняла, но проблема возникает в том, что в массиве dp, который я использую для записи посчитанных соседних сумм и выбора из них минимальной, некоторые значения являются нулями. Так выходит из-за того что по умолчанию массив заполнен нулями, а по моему циклу данное значение еще не заполнено. Поэтому выходит неверный результат. Вопрос в том, как это исправить? Или надо полностью менять алгоритм? В примерах, что читала обычно объект двигался только вправо и вниз и такой проблемы из-за этого и не возникало. Я делала на Java, но могу почитать объяснения и на других языках. Привела часть кода:
for (int j = 0; j < M; j++) {
if (i == 0 && j == 0) {
dp[0][0] = 0;
} else if (i == 0) {
if (j == M-1) {
dp[i][j] = Math.min(dp[i][j-1], dp[i+1][j]) + map[i][j];
} else {
dp[i][j] = minOf3(dp[i][j-1], dp[i+1][j], dp[i][j+1]) + map[i][j];
}
} else if (j == 0) {
if (i == N-1) {
dp[i][j] = Math.min(dp[i][j+1], dp[i-1][j]) + map[i][j];
} else {
dp[i][j] = minOf3(dp[i-1][j], dp[i][j+1], dp[i+1][j]) + map[i][j];
}
Ответы (1 шт):
Заполните массив dp заведомо большим числом (MAXINT), тогда выбор минимума будет работать, как надо.