Em hãy viết chương trình yêu cầu nhập vào lần lượt các thông tin sau: • Hai giá trị M và N tương ứng với số dòng và số cột của lưới ô vuông...

Yêu cầu dự án 3: 

Em hãy viết chương trình yêu cầu nhập vào lần lượt các thông tin sau: 
• Hai giá trị M và N tương ứng với số dòng và số cột của lưới ô vuông. 
• Các giá trị màu ở mỗi ô trong lưới ô vuông kích thước M N theo thứ tự hết dòng này đến dòng khác. 
• Ba giá trị r, c, m lần lượt là toạ độ dòng, toạ độ cột và màu mới của ô muốn đổi màu. In ra màn hình lưới ô vuông sau khi đã đổi màu các ô theo đúng yêu cầu của An. 

Gợi ý: Để duyệt qua được hết tất cả các ô cần đổi màu xuất phát từ ô (i, j) cho trước, ta lần lượt xét các ô liền kề với nó và đánh dấu nếu ô đó cùng màu, tiếp theo với những ô vừa đánh dấu thực hiện lặp lại cho đến khi không còn ô nào để đánh dấu.


Bài toán yêu cầu nhập vào một lưới ô vuông có kích thước M×NM \times NM×N, nhập vào màu sắc của các ô và sau đó thay đổi màu của một ô và các ô liên thông cùng màu với nó, chúng ta sẽ sử dụng một kỹ thuật tương tự như "flood fill" trong đồ họa máy tính:

def flood_fill(grid, r, c, new_color):

    rows = len(grid)

    cols = len(grid[0])

    original_color = grid[r][c]

    if original_color == new_color:

        return grid

    def dfs(x, y):

        if x < 0 or x >= rows or y < 0 or y >= cols:

            return

        if grid[x][y] != original_color:

            return

        grid[x][y] = new_color

        # Go to neighboring cells

        dfs(x + 1, y)

        dfs(x - 1, y)

        dfs(x, y + 1)

        dfs(x, y - 1)

    dfs(r, c)

    return grid

# Input the dimensions of the grid

M = int(input("Nhập số dòng M: "))

N = int(input("Nhập số cột N: "))

# Input the grid values

print("Nhập giá trị màu của từng ô trong lưới:")

grid = []

for i in range(M):

    row = list(map(int, input().split()))

    grid.append(row)

# Input the row, column and new color

r = int(input("Nhập tọa độ dòng r: "))

c = int(input("Nhập tọa độ cột c: "))

new_color = int(input("Nhập màu mới m: "))

# Perform the flood fill

updated_grid = flood_fill(grid, r, c, new_color)

# Print the updated grid

print("Lưới sau khi đổi màu:")

for row in updated_grid:

    print(" ".join(map(str, row)))


Bình luận

Giải bài tập những môn khác