문제
입출력
문제 요약
이 문제는 dfs가 몇번 돌아가는지, dfs 1번 돌아갈 때 몇번 탐색하는지를 구현하는 문제이다.
dfs 개념과 dfs의 재귀함수 과정을 안다면 쉽게 풀 수 있다.
코드
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
int map[25][25];
bool visited[25][25];
int dx[4] = { -1,0,1,0 };
int dy[4] = { 0,1,0,-1 };
int N, house = 1;
vector<int> seq;
void dfs(int x, int y) {
visited[x][y] = true;
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (nx < N && ny < N && nx >= 0 && ny >= 0) {
if (map[nx][ny] == 1 && !visited[nx][ny]) {
dfs(nx, ny);
house++;
}
}
}
}
int main() {
int count = 0;
string str;
cin >> N;
memset(map, 0, sizeof(map));
memset(visited, false, sizeof(visited));
for (int i = 0; i < N; i++) {
cin >> str;
for (int j = 0; j < N; j++) {
char a = str[j];
map[i][j] = a - '0';
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (map[i][j] == 1 && !visited[i][j]) {
dfs(i, j);
count++;
seq.push_back(house);
house = 1;
}
}
}
sort(seq.begin(), seq.end());
cout << count << endl;
for (int i = 0; i < seq.size(); i++) {
cout << seq[i] << endl;
}
}
'📖Algorithm > DFS & BFS' 카테고리의 다른 글
C++ [Algorithm] - 백준 24479 알고리즘 수업 - 깊이 우선 탐색 1 (0) | 2024.08.02 |
---|---|
C++ [Algorithm] - 백준 10026 적록색약 (0) | 2024.08.02 |
C++ [Algorithm] - 백준 4963 섬의 개수 (0) | 2024.08.02 |
C++ [Algorithm] - 백준 1520 내리막길 (0) | 2024.08.02 |
C++ [Algorithm] - 백준 1012 유기농 배추 (1) | 2024.07.29 |