알고리즘/백준

백준_1260 : DFS 와 BFS - C++

맏리믓 2023. 5. 19. 15:53

문제


문제 해석

- 문제 그대로 DFS, BFS 를 각각 구현 하고 주어진 시작 점 부터 탐색 순서를 출력 하는 문제이다.


알고리즘

- 그래프를 탐색 하기 때문에 graph 와 visited 배열을 만들어 준다.

- DFS, BFS 함수를 각각 만들어 준다.(방법은 아래 코드 참고)

- 각 함수에 의해 다음 탐색 할 node 가 방문하지 않았다면 방문 한 후 출력 하면 된다.


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


int N, M, V;
bool visited[1024] = {false};
bool Graph[1024][1024] = {false};
queue<int> q;

void DFS(int node){
    visited[node] = true;
    cout << node << " ";
    for(int i = 1; i <= N; i++){
        if(Graph[node][i] && !visited[i]){
            DFS(i);
        }
    }
}

void BFS(int node){
    q.push(node);
    visited[node] = true;
    cout << node << " ";

    while(!q.empty()){
        node = q.front();
        q.pop();
        for(int i = 1; i <= N; i++){
            if(Graph[node][i] && !visited[i]){
                q.push(i);
                visited[i] = true;
                cout << i << " ";
            }
        }
    }
}

int main(){
    cin >> N >> M >> V;

    for(int i = 0; i < M; i++){
        int a, b;
        cin >> a >> b;
        Graph[a][b] = true;
        Graph[b][a] = true;
    }

    DFS(V);
    cout << '\n';
    for(int i = 0; i <= N; i++){
        visited[i] = false;
    }

    BFS(V);
    cout << '\n';

    return 0;
}