문제
https://www.acmicpc.net/problem/1012
1012번: 유기농 배추
차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에
www.acmicpc.net
해설
몇개의 그룹이 있는지 맞추는 문제라 bfs, dfs 모두 사용 가능 => 조금 더 간단한 dfs로 구현
여러번 반복하는 문제의 경우 fill을 통해 내부 값을 0으로 초기화 시켜줌
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#include <bits/stdc++.h>
using namespace std;
const int box = 54;
int t, m, n, k, x, y, ret;
int mp[box][box];
int visited[box][box];
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};
void dfs(int y, int x)
{
visited[y][x] = 1;
for (int i = 0; i < 4; i++)
{
int nx = x + dx[i];
int ny = y + dy[i];
if (nx < 0 || ny < 0 || nx >= m || ny >= n || visited[ny][nx] == 1 || mp[ny][nx] == 0)
continue;
dfs(ny, nx);
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> t;
for (int p = 0; p < t; p++)
{
fill(&mp[0][0], &mp[0][0] + 54 * 54, 0);
fill(&visited[0][0], &visited[0][0] + 54 * 54, 0);
ret = 0;
cin >> m >> n >> k;
for (int i = 0; i < k; i++)
{
cin >> x >> y;
mp[y][x] = 1;
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (mp[i][j] == 1 && visited[i][j] == 0)
{
dfs(i, j);
ret++;
}
}
}
cout << ret << "\n";
}
}
|
cs |
'백준 알고리즘(C++)' 카테고리의 다른 글
백준 2583번 영역 구하기( C++ ) (1) | 2024.03.17 |
---|---|
백준 2468번 안전 영역( C++ ) (1) | 2024.03.17 |
백준 2178번 미로 탐색(C++) (1) | 2024.03.17 |
백준 4375번 1 (C++ ) (1) | 2024.03.06 |
백준 1629번 곱셈 ( C++ ) (2) | 2024.03.06 |