class Solution:
def colorBorder(self, grid: List[List[int]], row: int, col: int, color: int) -> List[List[int]]:
m, n = len(grid), len(grid[0])
# 记录网格中元素是否访问过
visited = [[False] * n for _ in range(m)]
# 记录连通分量为边界的情况
borders = []
originalColor = grid[row][col]
visited[row][col] = True
# 进行深度优先搜索
self.dfs(grid, row, col, visited, borders, originalColor)
# 根据题意,把边界的点也要着色
for x, y in borders:
grid[x][y] = color
return grid
def dfs(self, grid, x, y, visited, borders, originalColor):
isBorder = False
m, n = len(grid), len(grid[0])
# 定义四个方位,即上下左右
direc = ((-1, 0), (1, 0), (0, -1), (0, 1))
for dx, dy in direc:
nx, ny = x + dx, y + dy
# 判断为边界的条件,不满足条件的都是边界
if not (0 <= nx < m and 0 <= ny < n and grid[nx][ny] == originalColor):
isBorder = True
elif not visited[nx][ny]:
visited[nx][ny] = True
self.dfs(grid, nx, ny, visited, borders, originalColor)
# 将边界对应的xy放入borders中
if isBorder:
borders.append((x, y))
12-07
131
11-03
100