Wypełnienie w Pythonie

Jestem całkowicie nowy w algorytmie Flood Fill. Sprawdziłem to z Wikipedii (http://en.wikipedia.org/wiki/Flood_fill). Ale nie stał się tak mądry. Próbuję go użyć w następującej sytuacji. Mam matrycę:

matrix = [["a", "a", "b", "a", "a", "b"],
          ["a", "b", "b", "a", "b", "b"],
          ["b", "a", "b", "a", "a", "b"],
          ["b", "a", "b", "a", "b", "b"],
          ["a", "a", "b", "a", "a", "a"],
          ["a", "b", "b", "a", "a", "b"]]

Następnie pozwalam użytkownikowi wybrać jeden punkt z matrycy. Jeśli w tym punkcie jest"b" nic się nie dzieje. W drugim przypadku, jeśli w danym punkcie jest"a" Chcę zmienić ten punkt iwszystkie otaczające lub połączone punkty"a" do „c” za pomocą algorytmu wypełniania powodziowego.

Na przykład załóżmy, że użytkownik decyduje o macierzy [0] [0]. Wtedy nowa matryca byłaby:

matrix = [["c", "c", "b", "a", "a", "b"],
          ["c", "b", "b", "a", "b", "b"],
          ["b", "a", "b", "a", "a", "b"],
          ["b", "a", "b", "a", "b", "b"],
          ["a", "a", "b", "a", "a", "a"],
          ["a", "b", "b", "a", "a", "b"]]

Kontynuujmy ten przykład i powiedzmy, że użytkownik odrzucił nowy punkt, macierz [3] [1]. Wtedy mielibyśmy:

matrix = [["c", "c", "b", "a", "a", "b"],
          ["c", "b", "b", "a", "b", "b"],
          ["b", "c", "b", "a", "a", "b"],
          ["b", "c", "b", "a", "b", "b"],
          ["c", "c", "b", "a", "a", "a"],
          ["c", "b", "b", "a", "a", "b"]]

Próbuję zbudować funkcję zalewania funkcji (macierz, x, y) i jak dotąd wymyśliłem to:

def floodfill(matrix, x, y):
    if matrix[y][x] == "b":
        return matrix
    elif matrix[y][x] == ".":
        stack = []

Czy masz sposób, aby doprowadzić mnie do kontynuowania? Próbowałem przyjrzeć się tutaj przykładom wypełnienia powodzi SOF, ale wydawało się, że nie pasują do mojej sytuacji. Przynajmniej nie byłem w stanie zastosować tych przykładów do mojego kodu. Wypełnienie nie wydaje się być tym popularnym tematem tutaj ... Ale znowu pomoc byłaby bardzo ceniona!

questionAnswers(1)

yourAnswerToTheQuestion