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-й минуте.
challenge icon

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

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

Сбросить код
def orangesRotting(grid):
    # Напишите код здесь

Тест #1

Тест #2

Тест #3

Аргумент

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

Ожидаемый вывод

6