問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
ペイントソフトなどで使われているような塗りつぶしの処理を実装してみましょう。
白色のマス '.' または黒色のマス '#' から構成されている n × m のグリッドが与えられます。
ここで、グリッドの上から a 行目、左から b 列目のマスを、マス (a, b) と呼ぶことにします。
このグリッドの中で、(x, y) が含まれる、白色のマスからなる領域 (連結成分) の各マスを青色 '+' に置き換えて出力してください。
なお、連結成分とは、以下のような条件を満たすマスの集合のことをいいます。
・ 集合内のすべての 2 つのマスは、その集合に含まれる上下左右で隣接するマスへの移動を繰り返すことで行き来することができる。
・ 集合に含まれるすべてのマスは、同じ色である。
・ 集合に含まれないどのマスを追加しても、上のいずれかの条件を満たさなくなる。
n m x y
s_1
s_2
...
s_n
合計 n 行出力してください。
塗りつぶしを行ったあとの、n × m のグリッドを入力と同じように文字列の形式で n 行で出力してください。塗りつぶしたマスは '+' とすべきことに注意してください。
また、末尾に改行を入れ、余計な文字を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・ 1 ≦ n, m ≦ 1,000
・ 1 ≦ x ≦ n
・ 1 ≦ y ≦ m
・ n, m, x, y は整数
・ s_i は '.' または '#' からなる長さ m の文字列
・ マス (x, y) は白色のマスである (s_x_y = '.')
3 3 1 1
..#
##.
...
++#
##.
...