Ctrl K

Кратчайший путь катящегося шарика

Средняя
Лабиринт задан сеткой grid размером m × n: 0 — свободная клетка, 1 — стена. Всё за пределами сетки тоже считается стеной. В клетке start = [row, col] лежит шарик. Его можно толкнуть вверх, вниз, влево или вправо, и он катится по свободным клеткам, пока не упрётся в стену. Только остановившись, шарик можно толкнуть снова, в любую сторону. Длина пути — число клеток, через которые прокатился шарик, считая все толчки: стартовая клетка не считается, клетка остановки считается. Верните наименьшую длину пути, после которого шарик остановится ровно в клетке target = [row, col], или -1, если остановить его там нельзя.
Пример 1
grid=[[0, 0, 0], [1, 1, 0], [0, 0, 0]], start=[0, 0], target=[2, 0] → 6

Вправо на 2 клетки до [0, 2], вниз на 2 до [2, 2], влево на 2 до [2, 0]: всего 6.

Пример 2
grid=[[0, 0, 1], [0, 0, 0], [1, 0, 0]], start=[0, 0], target=[2, 2] → 4

Например: вправо на 1 до [0, 1] (дальше стена), вниз на 2 до [2, 1], вправо на 1 до [2, 2] — итого 4. Короче не получится.

Пример 3
grid=[[0, 0, 0], [0, 0, 0], [0, 0, 0]], start=[0, 0], target=[1, 1] → -1

В центре пустой сетки шарик остановиться не может.

Ограничения
  • 1 ≤ m, n ≤ 100
  • grid[i][j] равно 0 или 1
  • start и target — свободные клетки внутри сетки, и они не совпадают
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиШарик и лунка СложнаяЧерез опасное поле СредняяПерекрасить стрелки до выхода СложнаяСквозь стены в дальний угол СложнаяЗалы, открывающиеся по расписанию Сложная
загружаем Python…
Вход
grid=[[0, 0, 0], [1, 1, 0], [0, 0, 0]], start=[0, 0], target=[2, 0]
Ожидается
6

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 58 тестов на сервере, включая скрытые.