728x90
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 |