본문 바로가기

ALGORITHM/c&c++ baekjoon

[C++/1012] 유기농 배추 - using DFS

문제

 

1012번: 유기농 배추

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

www.acmicpc.net

 

아이디어: DFS

DFS로 1이 붙어있는 곳은 다 방문하고 결과를 + 1한다. 그 다음 방문하지 않았고, 1인 공간에 대해서 DFS를 반복하면 총 몇개의 분리된 공간이 나오는지 확인할 수 있다.

 

완성

#include <iostream>
#include <vector>
using namespace std;

int M, N;
int dx[4] = {0, 0, 1, -1};
int dy[4] = {1, -1, 0, 0};

void DFS(vector<vector<int>> &v, vector<vector<bool>> &visited, int i, int j)
{
    if (visited[i][j] == true || v[i][j] == 0)
        return;
    
    visited[i][j] = true;
  
    for(int idx = 0;idx < 4;idx++)
    {
        int tempR = i + dx[idx];
        int tempC = j + dy[idx];
        
        if (tempR < 0 || tempC < 0 || tempR >= N || tempC >= M)
            continue;
        
        else if (v[tempR][tempC] == 1 && visited[tempR][tempC] == false)
            DFS(v, visited, tempR, tempC);
    }
}

int main(void)
{
    int T;
    cin>>T;
    // M(가로), N(세로), K(배추 개수)
    int K;
    int resultarr[T];
    
    for(int iter = 0;iter < T;iter++)
    {
        cin>>N>>M>>K;
        int result = 0;
        
        vector<vector<int>> v(N, vector<int>(M, 0));
        vector<vector<bool>> visited(N, vector<bool>(M, false));
        
        for(int i = 0;i < K;i++)
        {
            int r = 0, c = 0;
            cin>>r>>c;
            v[r][c] = 1;
        }
        
        for(int i = 0;i < N;i++)
        {
            for(int j = 0;j < M;j++)
            {
                if (v[i][j] == 1 && visited[i][j] == false)
                    result++;
                    DFS(v, visited, i, j);
            }
        }
        resultarr[iter] = result;
    }
    for(int i = 0; i < T;i++)
        cout<<resultarr[i]<<endl;
}

'ALGORITHM > c&c++ baekjoon' 카테고리의 다른 글

[C++/18405] 경쟁적 전염 - using BFS  (0) 2022.05.06
[C++/2606] 바이러스 - using BFS  (0) 2022.04.29
[C++/2178] 미로 탐색 - using BFS  (0) 2022.04.28
[자료구조 알고리즘] 17413  (0) 2021.03.31
[17968/c++] Fire on Field  (0) 2020.10.01