본문 바로가기
코딩/cpp

[백준] 1012번

by 적막한숲 2025. 9. 27.

역시 queue를 사용할 때, visited 여부를 파악해야 하는데, 이 부분을 맨날 빠트리고 있다.

할 때, visited 필요하지 해놓고 정작 push할 때 써야 하는데 안쓰는 현실이 참 내가 봐도 우습다.

#include <iostream>
#include <sstream>
#include <queue>
#include <map>
#include <vector>

std::map<std::pair<int, int>, int> map;
std::vector<std::pair<int,int>> load;
std::map<std::pair<int, int>, int> visited;

int BFS(int);

int main() {
    int t;
    int m, n, k;
    std::cin >> t;
    std::ostringstream buffer;
    for (int i = 0; i < t; i++) {
        std::cin >> m >> n >> k;
        load.resize(k, {-1, -1});
        map.clear();
        visited.clear();
        int x, y;
        for (int j =0; j < k; j++) {
            std::cin >> x >> y;
            map[{x, y}] = 1;
            load[j] = {x, y};
        }
        buffer << BFS(k) <<std::endl;
    }
    std::cout << buffer.str();
    return 0;
}

int BFS(int k) {
    std::queue<std::pair<int, int>> q;
    int count = 0;
    for (int i = 0; i < k; i++) {
        if (visited[load[i]] == 0) {
            q.push(load[i]);
            while (!q.empty()) {
                int _x = q.front().first;
                int _y = q.front().second;
                map[{_x, _y}] = 0;
                visited[{_x, _y}] = 1;
                if (map[{_x+1, _y}] == 1  && visited[{_x+1, _y}] == 0) {
                    q.push({_x+1, _y});
                    visited[{_x+1, _y}] = 1;
                }
                if (map[{_x-1, _y}] == 1 && visited[{_x-1, _y}] == 0) {
                    q.push({_x-1, _y});
                    visited[{_x-1, _y}] = 1;
                }
                if (map[{_x, _y+1}] == 1 && visited[{_x, _y+1}] == 0) {
                    q.push({_x, _y+1});
                    visited[{_x, _y+1}] = 1;
                }
                if (map[{_x, _y-1}] == 1 && visited[{_x, _y-1}] == 0) {
                    q.push({_x, _y-1});
                    visited[{_x, _y-1}] = 1;
                }
                q.pop();
            }
            count++;
        }
    }

    return count;
}

'코딩 > cpp' 카테고리의 다른 글

[백준]1927번  (0) 2025.09.28
[백준] 1541번  (0) 2025.09.28
[백준] 17626번  (0) 2025.09.27
[백준] 11727번  (0) 2025.09.27
[백준]11726번  (0) 2025.09.27