본문 바로가기

Algorithm/백준

백준 1012번 유기농 배추 (c++)

BFS문제입니다. 모든 지역을 방문하고,

배추가 있는 지역에 방문했을 때, BFS로 연결되어있는 모든 지역을 다 방문합니다.

배추가 있는 지역을 처음 방문할 때의 횟수를 정답으로 출력해주면 됩니다.

#include <iostream>
#include <queue>

using namespace std;

int hatake[55][55];
bool visited[55][55];

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

int m, n, k;

bool isSafe(int x, int y)
{
    if (x >= 0 && x <= n - 1 && y >= 0 && y <= m - 1)
    {
        return true;
    }
    return false;
}

int main()
{
    int t;
    cin >> t;
    while (t--)
    {

        cin >> m >> n >> k;

        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < m; j++)
            {
                hatake[i][j] = 0;
                visited[i][j] = false;
            }
        }
        for (int i = 0; i < k; i++)
        {
            int x, y;
            cin >> x >> y;
            hatake[y][x] = 1;
        }
        int answer = 0;
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < m; j++)
            {
                if (hatake[i][j] == 1 && visited[i][j] == false)
                {
                    answer++;
                    queue<pair<int, int>> q;
                    q.push(make_pair(i, j));
                    visited[i][j] = true;
                    while (!q.empty())
                    {
                        pair<int, int> p = q.front();
                        q.pop();

                        for (int k = 0; k < 4; k++)
                        {
                            if (isSafe(p.first + dx[k], p.second + dy[k]) && hatake[p.first + dx[k]][p.second + dy[k]] == 1 && visited[p.first + dx[k]][p.second + dy[k]] == false)
                            {
                                q.push(make_pair(p.first + dx[k], p.second + dy[k]));
                                visited[p.first + dx[k]][p.second + dy[k]] = true;
                            }
                        }
                    }
                }
            }
        }
        cout << answer << '\n';
    }

    return 0;
}
반응형

'Algorithm > 백준' 카테고리의 다른 글

백준 11724번 연결 요소의 개수 (c++)  (0) 2020.10.01
백준 1764번 듣보잡 (c++)  (0) 2020.09.29
백준 1697번 숨바꼭질 (c++)  (0) 2020.09.29
백준 17626번 four squares (c++)  (0) 2020.09.27
백준 11049 행렬 곱셈 순서  (0) 2020.09.21