Menu
CoddyTech

Flood Fill

ŁatweGrafypython iconjava iconcpp iconc iconjs icon+10

Obraz to siatka liczb całkowitych, w której każda liczba oznacza kolor jednego piksela. Otrzymujesz obraz jako listę wierszy, piksel początkowy w wierszu sr i kolumnie sc oraz nowy color. Przemaluj region zawierający piksel początkowy: każdy piksel w kolorze piksela początkowego, do którego można dotrzeć z niego, przechodząc w górę, w dół, w lewo lub w prawo przez piksele tego samego koloru. Zwróć obraz po przemalowaniu.

Funkcja

floodFill(image: integer-2d-array, sr: integer, sc: integer, color: integer) → integer-2d-array
imageinteger-2d-array
obraz jako lista wierszy, po jednej liczbie na piksel
srinteger
wiersz początkowego piksela, liczony od 0
scinteger
kolumna pikselu początkowego, liczona od 0
colorinteger
nowy kolor regionu
Zwracainteger-2d-array
obraz po ponownym narysowaniu regionu

Ograniczenia

  • 1 ≤ image.length ≤ 80
  • 1 ≤ image[i].length ≤ 80
  • Każdy wiersz ma tę samą długość.
  • 0 ≤ image[i][j], color ≤ 65535
  • 0 ≤ sr < image.length oraz 0 ≤ sc < image[0].length

Przykłady

Wejście
image = [[1, 1, 0], [1, 0, 1], [1, 1, 1]]sr = 0sc = 0color = 5
Wyjście
[[5, 5, 0], [5, 0, 5], [5, 5, 5]]
Wyjaśnienie
Początkowe pole ma kolor 1. Pole 1 po jego prawej stronie, pola 1 wzdłuż lewej kolumny i dolnego wiersza oraz pole 1 nad prawym dolnym rogiem są z nim połączone, więc wszystkie siedem pól zmienia kolor na 5. Dwa pola 0 mają inny kolor, więc pozostają bez zmian.

lock icon+18 ukrytych testów przy wysłaniu

challenge icon

Pytanie dodatkowe

Jak zmieniłoby się Twoje rozwiązanie, gdyby piksele stykające się tylko narożnikiem również były uznawane za połączone?

Zresetuj kod
def floodFill(image, sr, sc, color):
    # Napisz kod tutaj
Przypadki testowe

Przypadek 1

Przypadek 2

Przypadek 3

Wejście

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

Oczekiwane

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