[BOJ] 1260번 DFS와 BFS - C++

"DFS와 BFS"

Posted by Yongmin on July 15, 2021

문제

DFS와 BFS

풀이

기본적인 DFS와 BFS를 구현하는 문제였다. 인접행렬을 만드는 법, 방문을 기억하는 visit함수와 함께 재귀를 이용한 DFS, 큐를 이용한 BFS 구현방법을 익힌 문제였다.

소스 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream>
#include <vector>
#include <queue>
using namespace std;

int N, M, V;
vector<vector<int>> map(1001, vector<int>(1001));
vector<bool> visit(1001);

void dfs(int s){
    
    visit[s] = true;
    printf("%d ", s);
    
    for(int i = 1; i<=N; i++){
        if(map[s][i] == 1 && visit[i] == false){
            dfs(i);
        }
    }
    
}

void bfs(int s){
    queue<int> q;
    q.push(s);
    visit[s] = true;
    while(!q.empty()){
        int x = q.front();
        printf("%d ", x);
        visit[x] = true;
        q.pop();
        
        for(int i = 1; i<=N; i++){
            if(map[x][i] == 1 && visit[i] == false){
                visit[i] = true;
                q.push(i);
            }
        }
    }
    
    
}
int main(){
    
    scanf("%d %d %d", &N, &M, &V);
    
    
    
    
    for(int i = 0; i<M; i++){
        int start;
        int end;
        scanf("%d %d", &start, &end);
        map[start][end] = 1;
        map[end][start] = 1;
    }
    
    
    
    dfs(V);
    printf("\n");
    
    for(int i = 1; i<=N; i++){
        visit[i] = false;
    }
    
    bfs(V);
}


# # #