본문 바로가기
PS

[C++] 백준 1260 - DFS와 BFS

by gamxong 2023. 2. 28.

백준 1260 : DFS와 BFS

난이도 : 실버 2

시간 : 10분 소요

 

 

문제

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를 사용하면 끝이다.

dfs와 bfs에 대해 잘 모른다면 간단히라도 꼭 먼저 공부하고 풀자

 

 

최종 코드

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

using namespace::std;

int n,m,v;
int visit1[1001];
int visit2[1001];

int b[1001][1001];

void bfs(int N){
    queue<int> q;
    visit2[N] = 1;
    q.push(N);
    
    while(!q.empty()){
        int f = q.front();
        q.pop();
        printf("%d ", f);
        for(int i=1; i<=1000; i++){
            if(b[f][i] == 1){
                if(visit2[i] == 0){
                    visit2[i] = 1;
                    q.push(i);
                }
            }
        }
    }
}

void dfs(int N){
    visit1[N] = 1;
    printf("%d ", N);
    
    for(int i=1; i<=1000; i++){
        if(b[N][i] == 1){
            if(visit1[i] == 0){
                visit1[i] = 1;
                dfs(i);
            }
        }
    }
}

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

 

 

실수를 해서 처음엔 틀렸다.

'PS' 카테고리의 다른 글

[C++] 백준 1012 - 유기농 배추  (0) 2023.02.28
[C++] 백준 1541 - 쉬운 최단거리  (0) 2023.02.28
[C++] 백준 1541 - 잃어버린 괄호  (0) 2023.02.24
[C++] 백준 2565 - 전깃줄  (0) 2023.02.24
[C++] 백준 9020 - 골드바흐의 추측  (0) 2023.02.24

댓글