[문제보기]
1012. 유기농 배추
1012번: 유기농 배추
차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 �
www.acmicpc.net
[풀이과정]
map 배열에 입력값을 저장 후 이중 for문으로 돌면서 BFS 알고리즘을 사용하여 방문 표시를 해주면서
count 해준다.
[소스코드]
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
int n, m, k, ans;
int map[51][51];
bool visit[51][51];
pair<int, int> movdir[4] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
void BFS(int a, int b){
queue<pair<int, int>> q;
q.push({a, b});
while(!q.empty()){
int y = q.front().first;
int x = q.front().second;
q.pop();
for(int i=0; i<4; i++){
int ny = y + movdir[i].first;
int nx = x + movdir[i].second;
if(ny < 0 || n <= ny || nx < 0 || m <= nx) continue;
if(map[ny][nx] == 0) continue;
if(visit[ny][nx]){
visit[ny][nx] = false;
q.push({ny, nx});
}
}
}
}
int main(){
int T;
cin >> T;
for(int test_case = 1; test_case <= T; test_case++){
memset(visit, true, sizeof(visit));
memset(map, 0, sizeof(map));
cin >> m >> n >> k;
int x, y;
for(int i=0; i<k; i++){
cin >> x >> y;
map[y][x] = 1;
}
ans = 0;
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
if(visit[i][j] == true && map[i][j] == 1){
visit[i][j] = false;
BFS(i, j);
ans++;
}
}
}
cout << ans << "\n";
}
}
[해결과정 중 실수한 부분]
'알고리즘 스터디 > Beakjoon' 카테고리의 다른 글
| [백준 4358][C++] 생태학 (Gold 4) (0) | 2020.10.06 |
|---|---|
| [백준 15681][C++] 트리와 쿼리 (Gold 5) (0) | 2020.10.06 |
| [백준 3584][C++] 가장 가까운 공통 조상 (Gold 4) (0) | 2020.10.06 |
| [백준 4803][C++] 트리 (Gold 4) (0) | 2020.10.06 |
| [백준 14675][C++] 단절점과 단절선 (Gold 5) (0) | 2020.10.06 |