[c++/알고리즘] 백준 1260 DFS와BFS

corncheese·2021년 8월 5일
0

알고리즘문제풀이

목록 보기
21/31
무려 2년 전에 풀어보다가 못풀어서 실패한 문제였다..ㅎㅎ


나의 풀이 >> 다른사람들보니 dfs를 더 간단하게 구현한 사람들이 많다..

#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;

int n, m, v, a, b;
vector<int> V[10001];
queue<int> Q;
int ch[1001];
int ch2[1001];
int f = 0;

void DFS(int s){
        for(int i=0; i<V[s].size(); i++){
            if(ch[V[s][i]] == 0){
                cout << V[s][i]<< " ";
                ch[V[s][i]] = 1;
                f++;
                DFS(V[s][i]);
            }
    }
}

void BFS(int s){
    int x;
    ch2[s] = 1;
    Q.push(s);

    while(!Q.empty()){
        x = Q.front();
        cout << x << " ";
        Q.pop();

        for(int i=0; i<V[x].size(); i++){
            if(ch2[V[x][i]] == 0) {
                Q.push(V[x][i]);
                ch2[V[x][i]] = 1;
            }
        }
    }
}
int main(){

    cin >> n >> m >> v;

    for(int i=0; i<m; i++){
        cin >> a >> b;
        V[a].push_back(b);
        V[b].push_back(a);
    }
    // 한 노드에서 방문할 수 있는 정점이 여러개인 경우에는 정점번호가 작은 것 먼저 방문하라. 
    // -> 각 노드에서 갈 수 있는 정점을 sort해주었다.
    for(int i=1; i<=m; i++){
        sort(V[i].begin(), V[i].end());
    }
	
    
    // DFS는 
    cout << v << " ";
    ch[v] = 1;
    DFS(v);
    cout << endl;

    BFS(v);

}

dfs 호출, bfs 연습..

0개의 댓글