끄적끄적 코딩
article thumbnail

DFS, BFS 문제입니다.

2차원 배열을 만들어서 바다가아니면 카운트를 증가시키고
DFS를 통해서 연결된 곳들을 전부 0으로 처리해주었습니다.

위를 반복하여서 최종 섬의 개수를 찾을 수 있었습니다.

 

#include <iostream>
#include <cstring>
using namespace std;

int w, h;
int c;
int map[60][60];
int mx[8] = { -1, -1, -1, 0, 0, 1, 1, 1 };
int my[8] = { -1, 0, 1, -1, 1, -1, 0, 1 };

void DFS(int a, int b)
{
	map[a][b] = 0;

	for (int i = 0; i < 8; ++i) {
		int x = a + mx[i];
		int y = b + my[i];

		if (map[x][y]) {
			DFS(x, y);
		}
	}
}

int main(int argc, char *argv[]) {
	while (1) {
		memset(map, 0, sizeof(map));
		c = 0;

		cin >> w >> h;
		if (!w && !h) {
			break;
		}

		for (int i = 1; i <= h; ++i) {
			for (int j = 1; j <= w; ++j) {
				cin >> map[i][j];
			}
		}

		for (int i = 1; i <= h; ++i) {
			for (int j = 1; j <= w; ++j) {
				if (map[i][j]) {
					++c;
					DFS(i, j);
				}
			}
		}

		cout << c << endl;
	}

	
	return 0;
}

'알고리즘' 카테고리의 다른 글

[C++] 백준 5567번 결혼식  (0) 2019.09.26
[C++] 백준 1068번 트리  (0) 2019.09.26
[C++] 백준 1120번 문자열  (0) 2019.09.26
[C++] 백준 2875번 대회 or 인턴  (0) 2019.09.26
[C++] 백준 10610번 30  (0) 2019.09.25

검색 태그