DFS와 BFS

BiBi·2021년 2월 4일
0

코딩테스트연습

목록 보기
57/66
#include <iostream>
#include <queue>
#include <stdio.h>

int arr[1001][1001];
bool vi[1001];
bool vi2[1001];
int n, m, v;

void dfs(int v) {
    printf("%d ", v);
    vi[v] = true;
    int i;
    for (i = 1;i <= n;i++) {
        if (!vi[i] && arr[v][i]) {
            dfs(i);
        }
    }
}
void bfs(int v) {
    std::queue<int> q;
    q.push(v);
    vi2[v] = true;
    while (!q.empty()) {
        int news = q.front();
        vi2[news] = true;
        printf("%d ", news);
        q.pop();

        int i;
        for (i = 1;i <= n;i++) {
            if (arr[news][i] && !vi2[i]) {
                vi2[i] = true;
                q.push(i);
            }
        }

    }
}

int main()
{

    scanf("%d %d %d", &n, &m, &v);
    for (int i = 0;i < m;i++) {
        int a, b;
        scanf("%d %d", &a, &b);
        arr[a][b] = 1;
        arr[b][a] = 1;
    }
    dfs(v);
    printf("\n");
    bfs(v);

}

profile
Server Network Engineer

0개의 댓글