백준 11403 경로찾기 C++

김기대·2022년 3월 20일
0

- 문제

문제 보러가기

BFS 자료구조 정리
BFS를 정리하며 간단한 그래프 이론 문제를 하나 풀어보았다.

- 문제 풀이

  • 여러 문제들에서 BFS(Breadth First Search)를 구현할 때 모양은 거의 같다. 방문 여부를 확인하는 visited 배열, 탐색할 노드를 저장하는 queue를 사용하며, 문제마다 그래프의 범위, 가중치 등등 필요한 요소들을 추가해주면된다. 오늘 풀이할 문제는 가중치가 없는 그래프이며 bfs를 활용할 수 있는 가장 기본적인 문제라고 생각한다.

- 코드

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

vector<int>* graph;
int N, input;

void bfs(int start){
    queue<int> que;
    que.push(start);
    int visited[101] = {0, };
    while(!que.empty()){
        int current = que.front();
        que.pop();
        for(int i = 0; i < graph[current].size(); i++){
            int next = graph[current][i];
            if(!visited[next]){
                que.push(next);
                visited[next] = 1;
            }
        }
    }
    for(int i = 1; i <= N; i++){
        cout << visited[i] << " ";
    }
    cout << endl;
}

int main() {
    ios_base::sync_with_stdio(0);cin.tie(0);

    cin >> N;

    graph = new vector<int>[N+1];
    for(int i = 1; i <= N; i++){
        for(int j = 1; j <= N; j++){
            cin >> input;
            if(input){
                graph[i].push_back(j);
            }
        }
    }

    for(int i = 1; i <= N; i++){
        bfs(i);
    }

    return 0;
}
profile
고수가 될 수 있을까?

0개의 댓글