PS/Baekjoon Online Judge

[백준 1260] DFS와 BFS [C]

kimyoungrok 2021. 8. 5. 21:52
728x90

백준 - 1260


풀이

DFS는 방문 기록이 없는 정점만 탐색하면 된다.

BFS는 방문한 정점을 visited뿐만 아니라 Queue에 순서대로 기록하고, front로 탐색의 기준점을, rear로 탐색의 중단점을 설정해주면 된다.


소스코드

#include <stdio.h>
#include <memory.h>
int N, arr[1001][1001], visited[1001], queue[1001];
void dfs(int v){
    visited[v] = 1;
    printf("%d ", v);
    for (int i = 1; i <= N; i++)
        if (arr[v][i] && !visited[i])
            dfs(i);
}
void bfs(int v){
    visited[v] = 1;
    printf("%d ",(queue[0] = v));
    int front = 0, rear = 1;
    while (front < rear){
        int pop = queue[front++];
        for (int i = 1; i <= N; i++)
            if (arr[pop][i] && !visited[i]){
                printf("%d ", i);
                queue[rear++] = i;
                visited[i] = 1;
            }
    }
}
int main(){
    int M, V, x, y;
    scanf("%d %d %d", &N, &M, &V);
    while (M--){
        scanf("%d %d", &x, &y);
        arr[x][y] = arr[y][x] = 1;
    }
    dfs(V);
    memset(visited, 0, sizeof(visited));
    putchar(10);
    bfs(V);
}

출처

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사

www.acmicpc.net

728x90

'PS > Baekjoon Online Judge' 카테고리의 다른 글

[백준 1557] 제곱 ㄴㄴ [C]  (2) 2021.08.06
[백준 1764] 듣보잡 [C/C++]  (0) 2021.08.06
[백준 2630] 색종이 만들기 [C]  (0) 2021.08.05
[백준 1026] 보물 [C]  (0) 2021.08.05
[백준 1541] 잃어버린 괄호 [C]  (0) 2021.08.04