본문 바로가기

알고리즘/BOJ

1260번

1260번 - DFS 와 BFS


DFS와 BFS.. 1년 전에 풀이기록을 보니까 10번 정도 제출해서 못 맞추고 넘어갔지만


그래도 나름 PS 를 조금 풀어보고 난 후에는 풀 수 있었다.


그떄는 DFS 가 너무 어려웠었다. 재귀 개념 자체가.. 근데 지금 완전 탐색, DP를 재귀로 풀면서 그나마 약간 감을 잡은 것 같다.



이런식으로 간선이 연결된 그래프를 풀 때 나는 주로 vector를 사용한다.


그리고 for문으로 항상 그 벡터의 사이즈 만큼 돌려주는 것을 익숙하게 사용하고 손에 익어서 계속 사용하는 것 같다.


노드와 정점을 표현하는 방법은 2가지 정도 있는거 같은데 나는 이게 익숙하다.


인접행렬 표현보다는 vector를 이용한 인접리스트로..


오랜만에 BFS DFS 라 처음에는 정점 방문 체크를 제대로 안해서 무한루프가 돌았지만 ... 그래도 이정도는 풀 수 있는 것 같다


정점 방문 할때 작은 순서부터 방문하다 보니 sort 함수를 써서 오름차순 정렬을 하고 문제를 풀었다.


<정답 코드>


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
#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>
#include<string.h>
using namespace std;
int N, M, S;
vector<int> node[1001];
queue<int> q;
bool check[1001];
void dfs(int start)
{
    
    cout << start << " ";
    
    check[start] = true;
    for (int i = 0; i < node[start].size(); i++)
    {
        if (!check[node[start][i]])
        {
        
            dfs(node[start][i]);
        }
    }
 
    return;
}
 
void bfs(int start)
{
 
    check[start] = true;
    q.push(start);
 
    while (!q.empty())
    {
        int x = q.front();
        cout << x << " ";
        q.pop();
 
        for (int i = 0; i < node[x].size(); i++)
        {
            if (!check[node[x][i]])
            {
                q.push(node[x][i]);
                check[node[x][i]] = true;
            }
        }
    }
 
}
int main()
{
 
    cin >> N >> M >> S;
 
    for (int i = 0; i < M; i++)
    {
        int a, b;
        cin >> a >> b;
        node[b].push_back(a);
        node[a].push_back(b);
    }
 
    for (int i = 1; i <= N; i++)
    {
        sort(node[i].begin(), node[i].end());
    }
 
    dfs(S);
    cout << endl;
    memset(check, falsesizeof(check));
    bfs(S);
 
    return 0;
}
cs


반응형

'알고리즘 > BOJ' 카테고리의 다른 글

1707번  (0) 2017.11.22
11724번  (0) 2017.11.22
11052번  (0) 2017.11.22
2011번  (0) 2017.11.22
2225번  (0) 2017.11.21