import java.io.*; /** * 2009年 国内予選B問題 島はいくつある? * http://www.waseda.jp/assoc-icpc2009/preliminarity/contest/all_ja.html#section_B * * 格子状のフィールドに、0と1が書かれている。斜めを含めて隣り合う1を1つの島と見た時に全フィールド内にいくつの島があるのかを求める問題である。データマイニングにおけるクラスタリングのアルゴリズムとほぼ同等である。ほぼという意味は、この問題は生成したクラスタの要素をあげる必要はなく、クラスタ数のみを表示すればよい、からである。よってアルゴリズムとしては、フラグなどを用いず、島の2次元配列の島になる部分を発見し次第、島ではないようにしていけばよい。 */ public class Exp2009_B { /** 指定された行、列の島を海にし、その周りの島に対しても同じ関数(clear)を呼び出す */ public static void clear(int[][] space,int row,int col){ space[row][col] = 0; // 行についてループする。但し、0未満、スペースの高さ以上に値がならないように調整してループする。 for(int r=((row-1>=0)?row-1:0);r<=((row+1=0)?col-1:0);c<=((col+1