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:
Číslo N udávající rozměr čtvercové bitmapy (maximálně 80)
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.).
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ě:
Jeden pixel sám o sobě je souvislá plocha.
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:
#*#.. #*#.. ***## *#*** *###*