BFS
2-D
Template
- 0-1 matrix
- 最短路
- 长度 >= 100 (用dfs会超时)
DFS: * 找到一条路径就可以返回
directions = [(0,1), (0,-1), (-1,-1), (-1,0), (-1,1), (1,-1), (1,0), (1,1)]
Q = deque([(0, 0)])
ans = 1
grid[0][0] = 1
while Q:
for _ in range(len(Q)):
x, y = Q.popleft()
if x == n - 1 and y == n - 1:
return ans
for dir in directions:
x_new = x + dir[0]
y_new = y + dir[1]
if 0<=x_new<n and 0<=y_new<n and grid[x_new][y_new] == 0:
grid[x_new][y_new] = 1
Q.append((x_new, y_new))
ans += 1
记录层数
while Q:
layer_num = len(Q)
for i in range(layer_num):
x, y = Q.popleft()
for x_d, y_d in dirs:
x_n = x + x_d
y_n = y + y_d
if x_n < 0 or x_n >= m or y_n < 0 or y_n >= n:
continue
if grid[x_n][y_n] == 1:
grid[x_n][y_n] = 2
fresh_changes_cnt += 1
Q.append((x_n, y_n))
What I have done
542. 01 Matrix
994. Rotting Oranges
1091. Shortest Path in Binary Matrix
Template
Minimize Maximum Value
while len(min_heap) > 0:
H, x, y = heapq.heappop(min_heap)
if x == n-1 and y == n-1:
return H
for xd, yd in dirs:
xn = x + xd
yn = y + yd
if xn < 0 or xn >= n or yn < 0 or yn >= n or visited[xn][yn]:
continue
nH = max(H, grid[xn][yn])
visited[xn][yn] = 1
heapq.heappush(min_heap, (nH, xn, yn))
What I have done
778. Swim in Rising Water
1102. Path With Maximum Minimum Value