ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준 1012] 유기농 배추 C++ (bfs, dfs)
    study/PS 2020. 2. 10. 16:38

     

    BFS, DFS를 이용하는 탐색문제인 유기농 배추입니다.

    저는 BFS를 이용하며 풀었지만, DFS역시 사용 가능합니다.

    테스트 케이스 방식의 입력을 받기 때문에 각각의 테스트 케이스마다 배열을 초기화 해주는 부분이 필요로 합니다.

    풀이

    #include <cstdio>
    #include <cstring>
    #include <queue>
    using namespace std;
    typedef pair<int, int> p;
    
    queue<p> q;
    
    int n, m, k;
    int map[51][51];
    int visited[51][51];
    int cross_x[] = {0, 0, -1, 1};
    int cross_y[] = {1, -1, 0, 0};
    
    void bfs(int x, int y)
    {
        visited[x][y] = 1;
        while (!q.empty())
        {
            x = q.front().first;
            y = q.front().second;
            q.pop();
            for (int i = 0; i < 4; i++)
            {
                int dx = x + cross_x[i];
                int dy = y + cross_y[i];
                if (0 <= dx && 0 <= dy && dx < n && dy < m)
                    if (!visited[dx][dy] && map[dx][dy])
                    {
                        q.push(make_pair(dx, dy));
                        visited[dx][dy] = 1;
                    }
            }
        }
    }
    
    int main(void)
    {
        int t;
        scanf("%d", &t);
        while (t--)
        {
            int cnt = 0;
            memset(visited, 0, sizeof(visited));
            memset(map, 0, sizeof(map));
            scanf("%d %d %d", &m, &n, &k);
            for (int i = 0; i < k; i++)
            {
                int x, y;
                scanf("%d %d", &x, &y);
                map[y][x] = 1;
            }
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    if (!visited[i][j] && map[i][j])
                    {
                        q.push(make_pair(i, j));
                        bfs(i, j);
                        cnt++;
                    }
                }
            }
            printf("%d\n", cnt);
        }
    }

    'study > PS' 카테고리의 다른 글

    [백준 1629] 곱셈 python (수학)  (0) 2021.02.04
    [백준 1309] 동물원 C++ (DP, 다차원)  (0) 2020.02.21

    댓글

Designed by Tistory.