수학과의 좌충우돌 프로그래밍

[C++] BAEKJOON 1260 DFS 와 BFS 본문

알고리즘/C++

[C++] BAEKJOON 1260 DFS 와 BFS

ssung.k 2019. 9. 28. 02:40

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

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사이에 여러 개의 간선이 있을 수 있다. 입력으로 주어지는 간선은 양방향이다.

www.acmicpc.net

DFS 와 BFS 를 구현하는 기본적인 문제입니다.

#include <iostream>
#include <queue>

using namespace std;

int arr1[1002][1002]; // 그래프를 2차원 배열로 표현
int arr2[1002][1002]; // 그래프를 2차원 배열로 표현
int visited1[1002];
int visited2[1002];

void DFS(int now, int N)
{
    int i;
    // 시작노드 방문으로 처리 후 출력
    visited1[now] = 1;
    cout << now << " ";

    for (i=1;i<=N;i++){
        if (arr1[now][i] == 1 && visited1[i] == 0){
            DFS(i,N);
        }
    }
}

void BFS(int now, int N)
{
    queue<int>q;
    int i;

    // 방문한 노드로 표시
    visited2[now] = 1;
    cout << now << " ";
    q.push(now);

    while(1){
        // 맨 앞의 원소를 현재 위치로 하고 큐에서 제거
        now = q.front();
        q.pop();
        for(i=1;i<=N;i++){
            // 간선이 있고 정점에 방문을 안했으면
            if (arr2[now][i] == 1 && visited2[i] ==0){
                visited2[i] = 1;
                cout << i << " ";
                // 간선으로 넘어간 곳의 정점을 queue에 삽입
                q.push(i);
            }
        }
        // 큐가 비었으면 종료한다.
        if (q.empty())
            break;
    }
}

int main(int argc, const char * argv[]) {
    int N, M, start, now; // 정점의 개수, 간선의 개수, 시작 정점, 현재 정점
    cin >> N >> M >> start;

    int i;
    int vertex1 ,vertex2;

    for(i=0;i<M;i++){
        cin >> vertex1 >> vertex2;
        arr1[vertex1][vertex2] = 1; // 간선을 연결
        arr1[vertex2][vertex1] = 1; // 대칭 부분도 연결
        arr2[vertex1][vertex2] = 1;
        arr2[vertex2][vertex1] = 1;
    }

    now = start;

    // 현재 시작하는 노드와 정점의 개수
    DFS(now,N);
    cout << endl;
    BFS(now,N);
}

 

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

[C++] BAEKJOON 16282 Black Chain  (0) 2019.09.29
[C++] BAEKJOON 16283 Farm  (0) 2019.09.29
[C++] BAEKJOON 2606 바이러스  (0) 2019.09.22
[C++] BAEKJOON 1717 집합의 표현  (0) 2019.09.22
[C++] BAEKJOON 2110 공유기 설치  (0) 2019.09.21
Comments