본문 바로가기

Algorithm_BOJ(백준)/깊이,너비우선탐색(DFS,BFS)

[백준 1260 c++ VO] DFS와 BFS

728x90
반응형
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
69
70
71
72
73
74
75
76
77
78
79
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio> // c 문법 헤더파일
#include<vector> // 동적배열 라이브러리
#include<queue>
using namespace std// cin,cout 편하게 사용 라이브러리 
 
// [백준 1260 c++ VO] DFS와 BFS
// 문제: 기본 인접행렬 그래프 dfs,bfs 탐색 
// 접근1: 기본 인접행렬 그래프 탐색
// 풀이: 
// 인접행렬 완성
// dfs 탐색
// bfs탐색
 
int visited[10001];
int adj_arr[1001][1001];
int n, m, v;
 
// dfs
void dfs(int v) {
    // 방문처리
    visited[v] = 1;
    cout << v << " ";
    for (int i = 1; i <= n; i++) {
        // 간선존재, 방문하지 않았으면 
        if (visited[i] == 0 && adj_arr[v][i] == 1) {
            dfs(i);
        }
    }
}
 
// bfs
queue<int> q;
int visited1[10001];
void bfs(int v) {
 
    q.push(v);
    visited1[v] = 1;
 
    while (!q.empty()) {
        // 큐에서 꺼내면서 방문처리
        v = q.front();
        cout << v << " ";
        q.pop();
 
        for (int i = 1; i <= n; i++) {
            // 간선존재, 방문하지 않았으면 
            if (visited1[i] == 0 && adj_arr[v][i] == 1) {
                q.push(i);
                visited1[i] = 1;
            }
 
        }
 
    }
 
}
int main()
{
    // IO 속도 향상
    ios_base::sync_with_stdio(0);
    cin.tie(NULL); cout.tie(NULL);// 입출력 시간 단축
 
    cin >> n >> m >> v;
 
    for (int i = 0; i < m; i++) {
        int row, col;
        cin >> row >> col;
        adj_arr[row][col] = 1;
        adj_arr[col][row] = 1;
    }
 
    dfs(v);
    cout << '\n';
    bfs(v);
    return 0;
}
 
cs
반응형