Виклик
Враховуючи розмір сітки, позиції перешкод, позицію гравця та цільову позицію, ваше завдання - знайти шлях для гравця, щоб дістатися до цілі та одночасно уникати перешкод (якщо це необхідно).
Вхідні дані
- N : розмір сітки
N x N
- П : Позиція гравця
[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
(якщо це робить ваш код коротшим).