#include <bits/stdc++.h>
using namespace std;
char check[26][26];
int n;
int cnt = 0;
bool dfs(int x,int y) {
if (x < 0 || x > n || y < 0 || y > n)
return 0;
if (check[x][y]-'0' == 1) {
check[x][y] = 2;
cnt += 1;
dfs(x - 1, y);
dfs(x + 1, y);
dfs(x, y - 1);
dfs(x, y + 1);
return true;
}
return false;
}
int main(){
int ans = 0;
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> check[i][j];
}
}
vector<int> v1;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (dfs(i, j)) {
v1.push_back(cnt);
cnt = 0;
}
}
}
sort(v1.begin(), v1.end());
cout << v1.size()<<"\n";
for (int i = 0; i < v1.size(); i++) {
cout << v1[i]<<"\n";
}
}
dfs를 이용하여 한 단지의 블록수를 출력 해주는 문제이다.
이런 문제가 나오면 상 하 좌 우 이동한다하면 저렇게 좌표를 검색하여 dfs를 사용하여 문제를 해결 할 수 있다.
'Algorithm > graph' 카테고리의 다른 글
[백준] 알고리즘 2178번 - 미로 탐색 문제 (0) | 2021.01.28 |
---|---|
[백준] 알고리즘 7576번 - 토마토 문제 (0) | 2021.01.27 |
[백준] 알고리즘 9466번 - 텀 프로젝트 문제 (0) | 2021.01.24 |
[백준] 알고리즘 2331번 - 반복수열 문제 (0) | 2021.01.22 |
[백준] 알고리즘 10451번 - 순열 사이클 문제 (0) | 2021.01.22 |