Cho lưới 2D chứa các màu "r", "g", "b". Thực hiện flood fill tại hàng r, cột c với màu target. Thay thế tất cả ô kết nối (lên/xuống/trái/phải) và có cùng màu với ô gốc bằng màu target.
Ví dụ: ma trận 3x3 toàn 'r' tại hàng 0, cột 0 tô thành 'g' → các ô 'r' liên thông đều thành 'g'.
Quy trình giải quyết (DFS)
- Tạo tập
seenlưu ô đã thăm. - Lưu
oldcolor = matrix[r][c]. - Định nghĩa hàm
dfs(i, j):- Nếu ô hợp lệ, chưa thăm, và màu bằng
oldcolor:- Đánh dấu đã thăm, đổi màu thành
target. - Gọi đệ quy 4 hướng:
(i+1,j),(i,j+1),(i,j-1),(i-1,j).
- Đánh dấu đã thăm, đổi màu thành
- Nếu ô hợp lệ, chưa thăm, và màu bằng
- Gọi
dfs(r, c)và trả về ma trận.
Ví dụ mã nguồn
class Solution:
def solve(self, matrix, r, c, target):
def dfs(i, j):
if (0 <= i < len(matrix) and 0 <= j < len(matrix[0])
and (i, j) not in seen and matrix[i][j] == oldcolor):
seen.add((i, j))
matrix[i][j] = target
dfs(i + 1, j)
dfs(i, j + 1)
dfs(i, j - 1)
dfs(i - 1, j)
seen = set()
oldcolor = matrix[r][c]
dfs(r, c)
return matrix
ob = Solution()
matrix = [["r", "r", "r"], ["r", "g", "b"], ["g", "b", "b"]]
r, c, target = 0, 0, "g"
print(ob.solve(matrix, r, c, target))
# Output: [['g', 'g', 'g'], ['g', 'g', 'b'], ['g', 'b', 'b']]
Đầu vào
matrix = [["r", "r", "r"], ["r", "g", "b"], ["g", "b", "b"]], r = 0, c = 0, target = "g"
Đầu ra
[['g', 'g', 'g'], ['g', 'g', 'b'], ['g', 'b', 'b']]