Вызов
Учитывая размер сетки, положение препятствий, положение игрока и положение цели, ваша задача состоит в том, чтобы найти путь для игрока, чтобы добраться до цели и избежать препятствий одновременно (при необходимости).
вход
- N : размер сетки
N x N
- P : позиция игрока
[playerposx, playerposy]
- T : позиция цели
[targetposx, targetposy]
- O : позиции препятствий
[[x1, y1], [x2, y2],...,[xn, yn]]
Выход
Путь : путь, по которому игрок может добраться до цели[[x1, y1], [x2, y2],...,[xn, yn]]
правила
- Точка
[0,0]
находится в верхнем левом углу сетки. - Положение игрока всегда будет на левой стороне сетки.
- Положение цели всегда будет на правой стороне сетки.
- Сетка всегда будет иметь хотя бы одно препятствие.
- Вы можете предположить, что никакое препятствие не перекрывает игрока или целевую позицию.
- Вам не обязательно нужно найти минимальный путь.
- Игрок может двигаться только влево, вправо, сверху и снизу не по диагонали.
- Вы можете принять вход любым удобным способом.
- Вы можете предположить, что путь для игрока, чтобы добраться до цели, всегда будет существовать.
- Очевидно, что для каждого ввода существует несколько допустимых путей, выберите один.
- Предположим,
N > 2
что сетка будет как минимум3 x 3
.
Примеры
Входной сигнал: 9
, [6, 0]
, [3, 8]
, [[0, 5], [2, 2], [6, 4], [8, 2], [8, 7]]
Возможный выход:[[6, 0], [6, 1], [6, 2], [6, 3], [5, 3], [5, 4], [5, 5], [5, 6], [5, 7], [5, 8], [4, 8], [3, 8]]
Входной сигнал: 6
, [1, 0]
, [3, 5]
, [[1, 2], [2, 5], [5, 1]]
Возможный выход:[[1, 0], [1, 1], [2, 1], [2, 2], [2, 3], [2, 4], [3, 4], [3, 5]]
Заметка
Обратите внимание, что X
для строк и Y
столбцов. Не путайте их с координатами на изображении.
редактировать
Как указал @digEmAll, из-за правил #2
и #3
, playerY = 0
и targetY = N-1
. Таким образом, если вы хотите, вы можете взять только в качестве входных данных playerX
и и targetX
(если это делает ваш код короче).