• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

BFS 참고하세요

23.07.11 19:02 작성 조회수 185

0

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

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

int main() {
    cin >> n >> m >> k;

    vector<vector<int>> Map(n + 1, vector<int>(m + 1, 0));
    vector<vector<bool>> visited(n + 1, vector<bool>(m + 1, false));
    vector<pair<int, int>> flooded;

    for (int i = 0; i < k; i++) {
        int x, y;
        cin >> x >> y;
        Map[x][y] = 1;
        flooded.push_back({ x, y });
    }

    int max_size = 0;
    for (auto& start : flooded) {
        if (visited[start.first][start.second]) continue;

        int size = 0;
        queue<pair<int, int>> Q;
        Q.push(start);
        visited[start.first][start.second] = true;

        while (!Q.empty()) {
            size++;
            int x = Q.front().first;
            int y = Q.front().second;
            Q.pop();

            for (int i = 0; i < 4; i++) {
                int nx = x + dx[i];
                int ny = y + dy[i];

                if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && Map[nx][ny] == 1 && !visited[nx][ny]) {
                    Q.push({ nx, ny });
                    visited[nx][ny] = true;
                }
            }
        }

        max_size = max(max_size, size);
    }

    cout << max_size << endl;

    return 0;
}

 

DFS가 아닌 BFS 사용해도 문제는 풀립니다.

공부중이라 어느게 더 효율적인지는 모르겠습니다만, 혹시 BFS로 접근하실 분들 참고하라고 올려봅니다~

답변 1

답변을 작성해보세요.

0

안녕하세요^^

네. 이 문제와 같은 블러드 필(Blood Fill) 스타일의 문제는 DFS나 BFS나 아무걸로 해도 됩니다. 둘의 큰 차이는 없습니다.

감사합니다.