홍시홍의 프로그래밍

[백준 1260] dfs와 bfs 본문

알고리즘 문제풀이/백준

[백준 1260] dfs와 bfs

홍시홍 2018. 11. 14. 23:34

수정 20190825


문제 링크


https://www.acmicpc.net/problem/1260



문제 요구 사항

1. dfs 출력 결과

1.1 시작 노드 방문 -> 노드와 이어진 노드 방문 -> 깊이 탐색

2. bfs 출력 결과

2.1 시작 노드를  queue에 넣어 bfs 실시

1.1번 풀이

1. 시작 노드 방문 visit check

2. 시작 노드와 이어진 노드 방문 

3. 2번과 이어진 노드 방문 없을 경우 1로

4. 시작 노드와 이어진 거 끝까지 방문


2번 풀이

1. 시작 노드와 이어진 노드들 부터 방문

2. 이어진 노드에서 다시 이어진 노드들 방문





소스코드

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
#include <iostream>
#include <string.h>
#include <queue>
using namespace std;
int n, m, k;
int map[1001][1001];
int visit[1001];
queue<int> q;
//dfs 시작
void dfs(int r)
{
    visit[r] = 1;
    cout << r << " ";
    //전체 검색하여 조건맞으면 dfs 시작
    for (int i = 1; i <= n; i++)
    {
        if (map[r][i] == 1 && visit[i] == 0)
        {
            dfs(i);
        }
    }
}
//dfs
void bfs(int r)
{
    visit[r] = 1;
    q.push(r);
    while (!q.empty())
    {
        int x = q.front();
        cout << x << " ";
        q.pop();
        //전체 검색하여 조건에 맞으면 큐에 삽입
        for (int i = 1; i <= n; i++)
        {
            
            if (map[x][i] == 1 && visit[i] == 0)
            {
                //cout << "visit" << i << endl;
                visit[i] = 1;
                q.push(i);
                
            }
        }
    }
}
int main()
{
    cin >> n >> m >> k;
    for (int i = 0; i < m; i++)
    {
        int x, y;
        cin >> x >> y;
        map[x][y] = map[y][x] = 1;
    }
    dfs(k);
    memset(visit, 0sizeof(visit));
    cout << endl;
    bfs(k);
    return 0;
}
cs



'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준 17406] 배열돌리기 4  (0) 2019.08.13
[백준 14889] 스타트와 링크  (0) 2019.02.14
[백준 2589] 보물섬  (0) 2018.11.22
[백준 2178] 미로탐색  (0) 2018.11.20
[백준 1697] 숨바꼭질  (0) 2018.11.16
Comments