본문 바로가기
코딩/cpp

[백준] 11403번

by 적막한숲 2025. 10. 7.

floyd + bfs 개념을 이용

O(n*n*m)

m은 direct graph가 가르키는 갯수

#include <cstring>
#include <iostream>
#include <sstream>
#include <vector>

std::vector<std::vector<int>> graph;
std::ostringstream os;


void flyodBFS(int);

int main() {
    int n;
    std::cin >> n;
    graph.resize(n, std::vector<int>(n));

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            std::cin >> graph[i][j];
        }
    }
    flyodBFS(n);
    std::cout << os.str();
    return 0;
}

void flyodBFS(int n) {
    std::vector<int> visited(n);
    std::vector<int> path(n);
    std::vector<int> queue(n);
    for (int i = 0; i < n; i++) {
        std::memset(visited.data(), 0, sizeof(int) * n);
        std::memset(path.data(), 0, sizeof(int) * n);
        queue.clear();
        queue.push_back(i);
        while (!queue.empty()) {
            int _index = queue.front();
            path[_index] = 1;
            if (i == _index && !visited[_index]) {
                path[_index] = 0;
            }
            for (int j = 0; j < n; j++) {
                if (graph[_index][j] && !visited[j]) {
                    visited[j] = 1;
                    queue.push_back(j);
                }
            }
            queue.erase(queue.begin());
        }

        for (int j = 0; j < n; j++) {
            os << path[j] << " ";
        }
        os << std::endl;
    }

}

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

[백준] 1074번  (0) 2025.10.07
[백준] 14940번  (0) 2025.10.07
[백준] 11286번  (0) 2025.10.06
[백준] 5525번  (0) 2025.10.05
[백준] 1389번  (0) 2025.10.03