Ctrl K

Сколько можно ждать перед пожаром

Сложная
Поле задано матрицей field размером m × n. В каждой клетке одно из трёх значений: - 0 — трава, - 1 — огонь, - 2 — стена, сквозь которую не проходят ни вы, ни огонь. Вы стоите в левой верхней клетке (0, 0), а убежище — в правой нижней (m - 1, n - 1). Каждую минуту вы можете перейти на соседнюю по стороне клетку с травой. Сразу после вашего хода огонь перекидывается из каждой горящей клетки на все соседние по стороне клетки, кроме стен. Верните наибольшее число минут, которое можно простоять на старте, а потом всё равно благополучно добраться до убежища. Если дойти невозможно даже без ожидания, верните -1. Если до убежища можно дойти, сколько бы вы ни ждали, верните 10⁹. Если огонь доходит до убежища в ту же минуту, когда вы в него вошли, вы успели.
Пример 1
field=[[0, 0, 0, 1], [0, 2, 2, 2], [0, 0, 0, 0]] → 2

Огонь идёт влево по верхнему ряду и через 3 минуты доходит до старта, а дальше гонится за вами вниз по левому столбцу. Если простоять 2 минуты, вы всё время держитесь на шаг впереди огня и проходите 5 шагов до убежища. После 3 минут ожидания старт уже горит.

Пример 2
field=[[0, 0, 0, 0], [2, 2, 2, 0], [1, 2, 0, 0]] → 1000000000

Огонь заперт стенами в левом нижнем углу и никуда не распространяется, так что ждать можно сколько угодно: ответ 10⁹.

Пример 3
field=[[0, 0, 0, 0, 0], [0, 2, 2, 2, 0], [0, 2, 1, 0, 0]] → -1

Огонь доходит до убежища за 2 минуты, а любой путь к нему — 6 шагов. Не успеть даже без ожидания, ответ -1.

Ограничения
  • m == len(field), n == len(field[i])
  • 2 ≤ m, n ≤ 300
  • 4 ≤ m · n ≤ 2 · 10⁴
  • field[i][j] — 0, 1 или 2
  • field[0][0] == field[m - 1][n - 1] == 0
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиРамка вокруг кляксы СложнаяПереправа в прилив СложнаяПоследний день сухой переправы СложнаяМаршрут с самым высоким узким местом СредняяСамый пологий маршрут Средняя
загружаем Python…
Вход
field=[[0, 0, 0, 1], [0, 2, 2, 2], [0, 0, 0, 0]]
Ожидается
2

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