Escape the Spreading Fire LeetCode solution in Python
1class Solution(object):2def maximumMinutes(self, A):3m, n = len(A), len(A[0])4inf = 10**105d = [[0, 1], [1, 0], [0, -1], [-1, 0]]6fires = [[i, j, 0] for i in range(m) for j in range(n) if A[i][j] == 1]7A = [[inf if a < 2 else -1 for a in r] for r in A]89def bfs(queue, seen):10for i, j, t in queue:11if seen[i][j] < inf:12continue13seen[i][j] = t14for di, dj in d:15x, y = i + di, j + dj16if (170 <= x < m18and 0 <= y < n19and seen[x][y] >= inf20and t + 1 < A[x][y]21):22queue.append([x, y, t + 1])2324def die(t):25seen = [[inf + 10] * n for i in range(m)]26bfs([[0, 0, t]], seen)27return seen[-1][-1] > A[-1][-1]2829bfs(fires, A)30A[-1][-1] += 131return bisect_left(range(10**9 + 1), True, key=die) - 1