問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
(電脳言語のオルダーソンループで出題された問題のヒント問題です。8 言語での解答コードと解説が用意されています。)
縦に H マス、横に W マスの長さの二次元グリッドが与えられます。それぞれのセルには、正負両方の値をとる整数が与えられます。
0 以上の整数が書かれた整数のみからなるセルをすべて選択したとき、連結成分がいくつできるかを求めてください。ただし、セルの集合が連結であるとは、セル集合内のある一つのセルから、上下左右に繋がっている集合内のセルを辿ることで、集合内の全てのセルを辿れることを指します。例えば、下の図では、黒いセルの集合は、左の 2 つの例では連結であり、右の 2 つの例では連結ではありません。
連結成分の個数は、左の 2 つの例では 1, 右上が 2, 右下が 3 となります。
入力例 1 では、連結成分の個数は 5 となります。
H W
g_{1, 1} g_{1, 2} ... g_{1, W}
g_{2, 1} g_{2, 2} ... g_{2, W}
...
g_{H, 1} g_{H, 2} ... g_{H, W}
・ 0 以上の整数が書かれたセルをすべて選択したときにできる連結成分の個数を出力してください。
・ 末尾に改行を入れ、余計な文字、空行を含んではいけません。
全てのテストケースにおいて, 以下の条件を満たします。
・ 5 ≦ H ≦ 30
・ 5 ≦ W ≦ 30
・ -1,000 ≦ g_{i, j} ≦ 1,000 (1 ≦ i ≦ H, 1 ≦ j ≦ W)
5 5
8 4 -24 1 -2
-9 0 -7 -813 -13
2 -1 4 9 8
-6 0 -4 0 13
3 8 1 -11 813
5