Bucket fill icon

Naprogramujte záplavový algoritmus!

Abychom všechno zjednodušili, nebudeme pracovat s opravdovým obrázkem, ale s textovým souborem bitmap.in. Ten bude obsahovat na prvních třech řádcích následující informace:

  1. Číslo N udávající rozměr čtvercové bitmapy (maximálně 80)

  2. Znak C který udává výplňovou barvu. Vždy to bude tisknutelný a "viditelný" znak (nikdy to nebude mezera, TAB, nebo znak konce řádku apod.).

  3. Počáteční souřadnice, kde se má začít s vybarvováním: čísla X (řádek) a Y (sloupec) oddělená mezerou. Počátkem souřadné soustavy je přitom levý horní roh: [X,Y] = [1,1].

Na dalších N řádcích bude vždy řetězec N tisknutelných znaků reprezentující řádek naši bitmapy.

Úkolem programu je vybarvit největší souvislou plochu stejné "barvy", která obsahuje "pixel" [X,Y], barvou C a vytisknout na standartní výstup výslednou bitmapu.

Souvislou plochu přitom definujeme rekurzivně:

  1. Jeden pixel sám o sobě je souvislá plocha.

  2. Pokud nějaký pixel A sousedí se souvislou plochou S a má stejnou barvu jako S, potom {množina pixelů obsažených v S} sjednocená s {A} (tj. s tímto pixelem) je také souvislá plocha.

Dva pixely [a,b] a [c,d] spolu sousedí právě tehdy, když:

((a=c) and (|b-d|=1)) or ((b=d) and (|a-c|=1))

Příklad 1:

vstup:

5
X
2 3
OOOOO
O###O
#OOO#
O#O#O
OO#OO

výstup:

OOOOO
OXXXO
#OOO#
O#O#O
OO#OO

Příklad 2:

vstup:

5
+
1 1
*-*-*
-*-*-
*-*-*
-*-*-
*-*-*

výstup:

+-*-*
-*-*-
*-*-*
-*-*-
*-*-*

Příklad 3:

vstup:

5
*
5 5
#.#..
#.#..
...##
.#...
.###.

výstup:

#*#..
#*#..
***##
*#***
*###*