2015-10-07 2 views
0

У нас есть лабиринт R X C, где 1 < = R, C < = 500. Этот лабиринт заполнен числами от -1 до 100. Теперь игра выглядит следующим образом:Интересный лабиринт

Где когда-либо есть -1 в квадрате, предположим, что это камень преткновения в , что клетка, и вы не можете двигаться Повсеместно эта клетка. Вы можете начать с любой ячейкой в ​​1-й колонке (конечно, которая не имеет -1) и выйти из в любую ячейку из последнего столбца. Вы можете перемещаться вверх, вниз, вправо. Как вы двигаетесь, u собирайте числа в ячейке, кроме -1, которые обозначают большой камень, который находится в нашем лабиринте. Каждая ячейка должна посещаться только .

Каков путь слева направо, где вы можете выбрать максимальную сумму чисел? ЛЕГКО !! Dp может делать магию Но Но ... вот улов - Правило 5.

Мы можем выйти из лабиринта, если мы сможем достичь первого или нижнего ряда. Но затем 2 вещи случаются:

a) Мы теряем все собранные до сих пор пункты.

b) мы располагаем лабиринт в той же колонке, но в противоположной ячейке.

ex: рассмотрите лабиринт 3X3 (1-indexed). поэтому, если мы доберемся, (1,2), мы можем выйти оттуда и потерять все точки и войти (3,2), и игра продолжается ....

Теперь мы должны найти путь с оценкой maxiumum ,

Я не могу видеть, как мы можем захватить это прыгание и обратно в лабиринте путем динамического программирования? Кроме того, каждый раз, когда мы это делаем, мы должны делать оценку «0».

Пример:

рассмотреть лабиринт:

-1 4 5 1 
2 -1 2 4 
3 3 -1 -1 
4 2 1 2 

ответ = 16.

(4,1) -> (4,2) -> (1,2) -> (1,3) -> (2,3) -> (2,4) -> (1,4)

+0

что значит «мы должны сделать оценку„0“каждый раз, когда мы делаем это» означает? – ergonaut

+1

@ergonaut, в приведенном выше примере: (4,2) -> (1,2) заставляет нас потерять все собранные точки и, следовательно, когда мы достигнем (1,2), наша оценка равна «0». В противном случае, если учесть только (4,1) -> (4,2), мы имели бы счет (4 + 2) = 6. –

+1

это поможет, если вы отформатируете свой лабиринт. – ergonaut

ответ

1

Запустите тот же алгоритм, что и у вас. После того, как вы закончите проверку столбца, если доступны верхние/нижние позиции (есть путь, чтобы попасть туда, и они не заблокированы).

Если один из них доступен, а другой не предполагается, вы можете добраться до недоступного с предыдущим счетом 0 (в основном запустите вычисление, но предположите, что ячейка в предыдущем столбце имеет счет 0).

Если нет, то ничего не поделаешь.

Если оба доступны, так как у вас есть положительный результат во всем мире, нет смысла что-то понижать> 0 и начинать с 0 снова.

+0

его не только dp. Я должен рассмотреть возможность доступа из 1-го столбца к тем пограничным ячейкам 1-го и последнего ряда, поскольку есть каменные блоки в b/t, блокирующие наш путь. Тогда только я могу решить, нужно ли рассматривать какую-либо ячейку, дающую максимальный ответ, или нет. Как захватить это целое? –

+0

Каждая ячейка должна содержать число> 0, если оно доступно каким-либо образом из первого столбца или -1, если оно заблокировано или нет доступа к этой ячейке. Поэтому вам не нужно учитывать, есть ли путь, он будет закодирован в ответе (если все ячейки в последнем столбце равны -1 после вашего dp, пути нет). – Sorin

+0

возможно, PLS представляет собой псевдо-код + базовые условия для того, чтобы я не получал его. –

1

Вы должны быть в состоянии получить список решений (без прохождения через -1) из

A) Left -> Right 
B) Top -> Right 
C) Bottom -> Right 

Тогда вы должны также быть в состоянии получить список путей из (без -1)

D) Left -> Top 
E) Left -> Bottom 

Из списка (B) удалите все, у которых нет пути соединения из списка (D). Из списка (C) удалите все, у которых нет пути подключения из списка (E).

Затем выбрать самое высокое разрешение из A, B, C.

Смежные вопросы