티스토리 뷰

알고리즘/백준

[백준] 1260번 DFS와 BFS

JeongHyeon 2018. 1. 9. 13:17

문제

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

풀이과정

DFS와 BFS 구현에 대한 기본적인 문제이다. DFS는 벡터를 이용해 구현했고, BFS는 큐를 이용해 구현하였다. 문제에서 방문할 수 있는 정점이 여러개일 경우에는 정점 번호가 작은 것을 먼저 방문한다는 조건을 주었기 때문에 DFS와 BFS를 실행하기 전에 인접 리스트를 정렬 시켜줬다.

소스코드

#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>

using namespace std;

int N, M, V;
vector<int> a[1001];
bool chk[1001];

void DFS(int node)
{
    chk[node] = true;
    cout << node <<" ";
    for (int i = 0; i < a[node].size(); i++)
    {
        int next = a[node][i];
        if (chk[next] == false)
            DFS(next);
    }
}

void BFS(int start)
{
    queue<int> q;
    memset(chk, false, sizeof(chk));
    chk[start] = true; q.push(start);

    while (!q.empty())
    {
        int node = q.front(); q.pop();
        cout << node << " ";
        for (int i = 0; i < a[node].size(); i++)
        {
            int next = a[node][i];
            if (chk[next] == false)
            {
                chk[next] = true;
                q.push(next);
            }
        }
    }
}

int main()
{
    cin.sync_with_stdio(false);

    cin >> N >> M >> V;

    for (int i = 0; i < M; i++)
    {
        int x, y;

        cin >> x >> y;

        a[x].push_back(y); a[y].push_back(x);
    }

    for (int i = 1; i <= N; i++)
    {
        sort(a[i].begin(), a[i].end());
    }

    DFS(V);
    cout << "\n";
    BFS(V);

    return 0;
}

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

[백준] 1707번 이분 그래프  (0) 2018.01.13
[백준] 9935번 문자열 폭발  (0) 2018.01.10
[백준] 11724번 연결 요소의 개수  (0) 2018.01.03
[백준] 2193번 이친수  (0) 2018.01.03
[백준] 11057번 오르막 수  (0) 2018.01.03
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함