알고리즘/BOJ
[c/c++] 백준/BOJ 1012번 문제 - 유기농 배추
wonjun.Aden
2022. 3. 11. 16:52
https://www.acmicpc.net/problem/1012
1012번: 유기농 배추
차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에
www.acmicpc.net
문제

문제풀이
#include <bits/stdc++.h>
using namespace std;
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
//유기농 배추
// 0은 배추가 심어져있지 않은 땅, 1은 배추가 심어져있는 땅
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
//test 케이스의 수 T
int t;
cin >> t;
//테스트케이스만큼 돌리기
while(t--){
//초기화해줘야할것? 큐 , 땅, 방문 여부?
queue<pair<int,int>> Q;
int board[51][51];
bool vis[51][51];
//땅 사이즈, 배추 심기
int m,n,k;
cin >> m >> n >> k;
for(int i=0;i<n;i++){
fill(board[i],board[i]+m,0);
}
for(int i=0;i<n;i++){
fill(vis[i],vis[i]+m,false);
}
for(int i=0;i<k;i++){
//배추의 위치
int x,y;
cin >> x >> y;
board[y][x] = 1;
}
int ans = 0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
//배추가 있고 방문하지 않았을 때 bfs 시작 및 count ++
if(board[i][j] == 1 && !vis[i][j]){
//bfs
vis[i][j]=true;
Q.push({i,j});
while(!Q.empty()){
pair<int,int> cur = Q.front();
Q.pop();
for(int dir=0;dir<4;dir++){
int nx=cur.first + dx[dir];
int ny=cur.second + dy[dir];
if(nx < 0 || nx >= n || ny < 0 || ny >= m ) continue;
if(vis[nx][ny] || board[nx][ny] != 1)continue;
vis[nx][ny] = true;
Q.push({nx,ny});
}
}
ans++;
}
}
}
cout << ans << '\n';
}
return 0;
}
문제의 포인트
- 배추가 있고 방문하지 않았을 때 bfs 시작!
반응형