나의 풀이 >> 다른사람들보니 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 연습..