마을 위성사진II(FloodFill)

exsoul·2022년 6월 15일
0

문제 설명


마을의 위성사진을 본 철수는 평지와 호수로 나뉘어져 있다는 것을 알았다.
이 사진을 통해 호수가 몇 개가 있는지 파악하려고 한다.

상, 하, 좌, 우, 대각선 중 하나라도 연결되어 있으면 하나의 호수로 간주한다면 철수의 마을에 몇 개의 호수가 있는지 파악할 수 있는 프로그램을 작성하자.

입력 설명


첫째 줄에는 마을의 크기 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;
}
profile
ocho

0개의 댓글