반응형

https://www.acmicpc.net/problem/4963

 

4963번: 섬의 개수

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도

www.acmicpc.net

 

w와 h 입력 순서, 8방향 이동만 주의해주면 됩니다.

 

#include <cstdio>
#include <cstring>
int w, h, map[50][50];
bool visit[50][50];
int dx[] = { -1,1,0,0, 1,1,-1,-1 };
int dy[] = { 0, 0, -1,1, 1,-1,1,-1 };
void dfs(int x, int y) {
	visit[x][y] = true;
	for (int i = 0; i < 8; i++) {
		int nx = x + dx[i];
		int ny = y + dy[i];
		if (nx < 0 || ny < 0 || nx >= h || ny >= w) continue;
		if (map[nx][ny] && !visit[nx][ny]) dfs(nx, ny);
	}
}
int main() {
	while (scanf("%d %d", &w, &h) && w != 0) {
		int c = 0;
		for (int i = 0; i < h; i++)
			for (int j = 0; j < w; j++) scanf("%d", &map[i][j]);
		memset(visit, false, sizeof(visit));
		for (int i = 0; i < h; i++)
			for (int j = 0; j < w; j++)
				if (!visit[i][j] && map[i][j]) {
					dfs(i, j);
					c++;
				}
		printf("%d\n", c);
	}
}
반응형

'Algorithm' 카테고리의 다른 글

백준 11727 : 2xn 타일링 2  (0) 2021.11.12
백준 14226 : 이모티콘  (0) 2021.11.12
백준 1707 : 이분 그래프  (0) 2021.11.11
백준 11723 : 집합  (0) 2021.11.11
백준 15658 : 연산자 끼워넣기 (2)  (0) 2021.11.11

+ Recent posts