Войдите, чтобы продолжить.
Игра «Сокобан» · Шаг 6 из 6
Дойти по щелчку
Гонять кладовщика стрелками через весь склад скучно. Щёлкни по клетке — и он сам дойдёт туда кратчайшей дорогой, обходя стены и ящики и ничего не толкая.
Что сделать
Проведите кладовщика к клетке по щелчку кратчайшей дорогой, ничего не толкая.
Что приходит
ot— где кладовщикdo— куда щёлкнулиstenyиyashchiki— клетки стен и ящиков; на них заходить нельзяvysotaиshirina— размер уровня
Что вернуть
Список направлений кратчайшего пути: ["vverh", "vpravo", …]; дойти нельзя — None; кладовщик уже там — [].
Допишите функцию put в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
В игре
Игра зовёт put, когда вы щёлкаете по клетке, и проводит кладовщика по вашему пути шаг за шагом. Решите шаг — и через склад можно будет ходить щелчками.
Без этого шага: щелчок ничего не делает — ходите стрелками.
Из (1, 1) в (1, 4): прямо мешает стена (1, 3), снизу — (2, 2). Путь — вверх, три раза вправо, вниз: ["vverh", "vpravo", "vpravo", "vpravo", "vniz"]. Соседей обход перебирает в порядке вверх, вниз, влево, вправо.
put((1, 1), (1, 4), [(0, 0), (2, 2), (1, 3)], [], 3, 5)
['vverh', 'vpravo', 'vpravo', 'vpravo', 'vniz']
Функция принимает клетку кладовщика, клетку назначения, стены, ящики и размер уровня (рядов, столбцов). Возвращает список направлений («vverh», «vniz», «vlevo», «vpravo») кратчайшего пути, не заходящего на стены и ящики и не выходящего за уровень (ряд от 0 до числа рядов, столбец так же). Если назначение — стена, ящик, за уровнем или до него не дойти — None. Если назначение и есть клетка кладовщика — пустой список. Путь ищется обходом в ширину; соседей клетки он перебирает в порядке вверх, вниз, влево, вправо и берёт первый найденный путь.
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.