문제 설명
마을의 위성사진을 본 철수는 평지와 호수로 나뉘어져 있다는 것을 알았다.
이 사진을 통해 호수가 몇 개가 있는지 파악하려고 한다.상, 하, 좌, 우, 대각선 중 하나라도 연결되어 있으면 하나의 호수로 간주한다면 철수의 마을에 몇 개의 호수가 있는지 파악할 수 있는 프로그램을 작성하자.
입력 설명
첫째 줄에는 마을의 크기 N이 주어진다. (4<=N<=100)
둘째 줄부터 N줄까지 마을 정보가 공백 없이 주어진다.
(0은 평지 1은 호수임)
출력 설명
호수의 개수를 출력한다.
입력 예시
5
01010
10001
01010
00100
10000
출력 예시
2
#include <stdio.h>
#define MAXN (100)
int N;
char map[MAXN+10][MAXN+10];
int dh[] = {-1, -1, -1, 0, 1, 1, 1, 0};
int dw[] = {-1, 0, 1, 1, 1, 0, -1, -1};
void FloodFill(int h, int w){
if (map[h][w] != '1') return;
map[h][w]='2';
for (int i=0; i<8; i++){
FloodFill(h+dh[i], w+dw[i]);
}
}
int Solve(void){
int cnt = 0;
for (int h=1; h<=N; h++){
for (int w=1; w<=N; w++){
if (map[h][w] != '1') continue;
FloodFill(h, w);
cnt++;
}
}
return cnt;
}
void InputData(void){
scanf("%d", &N);
for (int i=1; i<=N; i++){
scanf("%s", &map[i][1]);
}
}
int main(void){
int ans = -1;
InputData();//입력
ans = Solve();//여기서부터 작성
printf("%d\n", ans);//출력
return 0;
}