Ви водій такси в Сан-Франциско. Як це характерно для водіїв такси, ви пересуваєтеся по сітці, де єдиними допустимими напрямками, якими ви можете рухатись, є ліва, права, вгору та вниз. Однак Сан-Франсіско дуже горбистий, тому відстань між двома сусідніми перехрестями не обов'язково однакове. Більш конкретно, відстань між перехрестям на висоті a
та сусіднім перетином на висоті b
було б 1 + |a - b|
. Ваша мета - знайти всі найкоротші шляхи від вашого походження вгорі ліворуч від карти до місця призначення внизу праворуч.
Вхідні дані
Найбільш зручною є двовимірна сітка цілих чисел у будь-якому форматі (двовимірний масив, одновимірний масив із шириною та / або висотою тощо).
Вихідні дані
Послідовність напрямків для подорожі, щоб прибути в нижньому правому куті введення зліва вгору на найкоротшій можливій відстані, враховуючи відстань між двома сусідніми перехрестями висот a
і b
задається формулою 1 + |a - b|
. Якщо є кілька рішень, виведіть усі рішення.
Хоча я використовую U
, D
, L
і R
для вгору, вниз, вліво і вправо в прикладах нижче вашої програми можуть використовувати будь-які чотири різних рядки для подання напрямки так довго , як це узгоджується з ними і на всіх входах.
Приклади
Input:
0 3 0 0 0
0 2 0 2 0
0 0 0 3 0
Output:
D D R R U U R R D D
Input:
3
Output:
<empty>
Input:
11 11 11
11 11 11
11 11 11
Output:
R R D D
R D R D
R D D R
D R R D
D R D R
D D R R
Input:
7 8 1 -1 0
4 4 6 -1 7
3 4 4 2 8
2 5 2 -1 2
Output:
D R D R R D R
D R D R D R R
Це код-гольф, тому відповідь з найменшим числом байтів виграє.