Menu
CoddyTech

Flood Fill

FácilGrafospython iconjava iconcpp iconc iconjs icon+10

Uma imagem é uma grade de números inteiros, em que cada número representa a cor de um pixel. Você recebe a imagem como uma lista de linhas, um pixel inicial na linha sr e na coluna sc, e uma nova color. Repinte a região que contém o pixel inicial: todos os pixels da cor do pixel inicial que você consegue alcançar a partir dele avançando para cima, para baixo, para a esquerda ou para a direita por pixels dessa mesma cor. Retorne a imagem após a repintura.

Função

floodFill(image: integer-2d-array, sr: integer, sc: integer, color: integer) → integer-2d-array
imageinteger-2d-array
a imagem como uma lista de linhas, um número por pixel
srinteger
a linha do pixel inicial, contada a partir de 0
scinteger
a coluna do pixel inicial, contada a partir de 0
colorinteger
a nova cor da região
Retornainteger-2d-array
a imagem após a região ser repintada

Restrições

  • 1 ≤ image.length ≤ 80
  • 1 ≤ image[i].length ≤ 80
  • Cada linha tem o mesmo comprimento.
  • 0 ≤ image[i][j], color ≤ 65535
  • 0 ≤ sr < image.length e 0 ≤ sc < image[0].length

Exemplos

Entrada
image = [[1, 1, 0], [1, 0, 1], [1, 1, 1]]sr = 0sc = 0color = 5
Saída
[[5, 5, 0], [5, 0, 5], [5, 5, 5]]
Explicação
O início contém a cor 1. O 1 à sua direita, os 1s na coluna da esquerda e ao longo da linha inferior, e o 1 acima do canto inferior direito estão todos conectados a ele, então os sete se tornam 5. Os dois 0s são de uma cor diferente e permanecem iguais.

lock icon+18 testes ocultos ao enviar

challenge icon

Para ir além

Como sua solução mudaria se os pixels que se tocam apenas pelos cantos também fossem considerados conectados?

Redefinir código
def floodFill(image, sr, sc, color):
    # Escreva o código aqui
Casos de teste

Caso 1

Caso 2

Caso 3

Entrada

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

Esperado

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