Menu
CoddyTech

Rotting Oranges

Вам дана сетка в виде списка строк одинаковой длины. Каждая ячейка содержит 0 (пустая), 1 (свежий апельсин) или 2 (гнилой апельсин). Каждую минуту каждый свежий апельсин, который находится рядом с гнилым апельсином по стороне — сверху, снизу, слева или справа, — становится гнилым. Верните количество минут до тех пор, пока не останется свежих апельсинов, или -1, если какой-либо свежий апельсин никогда не сгниёт. Для сетки без свежих апельсинов в начале требуется 0 минут.

Функция

orangesRotting(grid: integer-2d-array) → integer
gridinteger-2d-array
сетка, один список из 0, 1 и 2 для каждой строки
Возвращаетinteger
Количество минут до момента, когда не останется свежих апельсинов, или -1, если этого никогда не произойдёт

Ограничения

  • 1 ≤ grid.length ≤ 150
  • 1 ≤ grid[i].length ≤ 150
  • Каждая строка имеет одинаковую длину.
  • Каждый grid[i][j] — это 0, 1 или 2.

Примеры

Ввод
grid = [[2, 1, 1, 0], [0, 1, 0, 1], [1, 1, 1, 1]]
Вывод
6
Пояснение
Если записывать ячейки как (строка, столбец), гниение начинается с (0,0) и распространяется по единственному пути: (0,1) на 1-й минуте, (0,2) и (1,1) на 2-й минуте, (2,1) на 3-й минуте, (2,0) и (2,2) на 4-й минуте, (2,3) на 5-й минуте. Апельсин в ячейке (1,3) соприкасается только с (2,3), поэтому он испортится последним, на 6-й минуте.

lock icon+21 скрытых тестов при отправке

challenge icon

Дополнительный вопрос

Предположим, каждой свежей апельсине требуется своё количество минут, чтобы испортиться после того, как соседний апельсин испортился. Как тогда найти время завершения?

Сбросить код
def orangesRotting(grid):
    # Напишите код здесь
Тестовые случаи

Случай 1

Случай 2

Случай 3

Ввод

grid = [[2, 1, 1, 0], [0, 1, 0, 1], [1, 1, 1, 1]]

Ожидается

6