Menu
CoddyTech

Flood Fill

Hình ảnh là một lưới gồm các số nguyên, trong đó mỗi số biểu thị màu của một pixel. Bạn nhận được hình ảnh dưới dạng danh sách các hàng, một pixel bắt đầu ở hàng sr và cột sc, cùng một color mới. Tô lại vùng chứa pixel bắt đầu: gồm mọi pixel có cùng màu với pixel bắt đầu mà bạn có thể đi đến từ pixel đó bằng cách di chuyển lên, xuống, sang trái hoặc sang phải qua các pixel cùng màu. Trả về hình ảnh sau khi tô lại.

Hàm

floodFill(image: integer-2d-array, sr: integer, sc: integer, color: integer) → integer-2d-array
imageinteger-2d-array
hình ảnh dưới dạng danh sách các hàng, mỗi điểm ảnh ứng với một số
srinteger
hàng của pixel bắt đầu, được đếm từ 0
scinteger
cột của điểm ảnh bắt đầu, được đếm từ 0
colorinteger
màu mới cho vùng
Trả vềinteger-2d-array
hình ảnh sau khi vùng đó được vẽ lại

Ràng buộc

  • 1 ≤ image.length ≤ 80
  • 1 ≤ image[i].length ≤ 80
  • Mỗi hàng có cùng độ dài.
  • 0 ≤ image[i][j], color ≤ 65535
  • 0 ≤ sr < image.length và 0 ≤ sc < image[0].length

Ví dụ

Đầu vào
image = [[1, 1, 0], [1, 0, 1], [1, 1, 1]]sr = 0sc = 0color = 5
Đầu ra
[[5, 5, 0], [5, 0, 5], [5, 5, 5]]
Giải thích
Ô bắt đầu có màu 1. Cả bảy ô 1 đều nối với ô đó qua các ô 1 chung cạnh, dọc theo cột bên trái, theo hàng dưới cùng và lên cạnh phải, nên tất cả đều chuyển thành 5. Hai ô 0 giữ nguyên màu.
challenge icon

Câu hỏi mở rộng

Nếu các pixel chỉ chạm nhau ở góc cũng được tính là liền kề, lời giải của bạn sẽ thay đổi thế nào?

Đặt lại code
def floodFill(image, sr, sc, color):
    # Viết code tại đây

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

image = [[1, 1, 0], [1, 0, 1], [1, 1, 1]]
sr = 0
sc = 0
color = 5

Đầu ra mong đợi

[[5, 5, 0], [5, 0, 5], [5, 5, 5]]