#include <cstdio>
#include <cstdlib>
#include <ctime>
const int N = 10;
int islands[N][N];
int label[N][N];
void init_islands(void)
{
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
islands[i][j] = rand() % 2;
}
}
}
void print_islands(void)
{
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
if (islands[i][j]) {
printf("■");
} else {
printf("□");
}
}
printf("\n");
}
}
int label_rec(int i, int j, int x)
{
if (i < 0 || N <= i || j < 0 || N <= j) {
return 0;
}
if (label[i][j] != -1) {
return label[i][j];
}
if (!islands[i][j]) {
return label[i][j] = 0;
}
label[i][j] = x;
label_rec(i - 1, j, x);
label_rec(i + 1, j, x);
label_rec(i, j - 1, x);
label_rec(i, j + 1, x);
return label[i][j];
}
int count_islands(void)
{
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
label[i][j] = -1;
}
}
int count = 0;
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
if (label[i][j] == -1) {
if (label_rec(i, j, count + 1)) {
++count;
}
}
}
}
return count;
}
int main(void)
{
srand(static_cast<unsigned int>(time(NULL)));
init_islands();
printf("count = %d\n", count_islands());
puts("--確認用--");
print_islands();
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
printf("%3d", label[i][j]);
}
puts("");
}
return 0;
}