티스토리 뷰

반응형

https://www.acmicpc.net/problem/1012

 

1012번: 유기농 배추

차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 

www.acmicpc.net


⊙ 문제

⊙ 입력

⊙ 출력

⊙ 예제 입출력

⊙ 알고리즘 분류

  • 그래프 이론
  • 그래프 탐색
  • 너비 우선 탐색
  • 깊이 우선 탐색

 


 

⊙ 문제 접근 과정

 

BFS 알고리즘 돌리고 T만큼 반복해야하니 reset()이라는 초기화 함수를 만들어줬다.


 

⊙ 문제 풀이

 

#include <iostream>
#include <queue>

using namespace std;
#define MAX 51

int M,N,K;
int arr[MAX][MAX]={0,};
int visited[MAX][MAX]={0,};
int dx[] = {1,0,-1,0};
int dy[] = {0,1,0,-1};
queue<pair<int,int>> q;

void bfs(int x,int y) {
    q.push({x,y});
    while(!q.empty()) {
        int a = q.front().first;
        int b = q.front().second;
        q.pop();
        visited[a][b]=true;
        for(int i=0;i<4;i++) {
            int nx = a + dx[i];
            int ny = b + dy[i];
            if(0<=nx && 0<=ny && nx <N && ny < M && !visited[nx][ny]&& arr[nx][ny]==1) {
                q.push({nx,ny});
                visited[nx][ny]=true;
            }
        }
    }
}

void reset() {
	while (!q.empty()) q.pop();
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < M; j++) {
			visited[i][j] = false;
			arr[i][j] = 0;
		}
	}
}
int main() {
    int T;
    cin >> T;

    for(int t=0;t<T;t++) {
        reset();

        cin >>M >> N >> K;
        int cnt=0;

        for(int i=0;i<K;i++) {
            int x,y;
            cin >> y >> x;
            arr[x][y]=1;
        }

        for(int i=0;i<N;i++) {
            for(int j=0;j<M;j++){
                if(arr[i][j]==1 && !visited[i][j]) {
                    bfs(i,j);
                    cnt++;
                }
            }
        }
    cout << cnt << "\n";
    }
}

⊙ 결과

 


⊙ 마무리

 

 

NONE

 

좋아요 로그인하지 않아도 누를 수 있습니다!

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함