#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#include <map>
#include <string>
#include <queue>
void dfs(int _vertex , vector<vector<int>> &_v,
vector<bool>& _check)
{
if (_check[_vertex] == true)
return;
_check[_vertex] = true;
cout << _vertex << " ";
for (int i = 0; i < _v[_vertex].size(); ++i)
{
dfs(_v[_vertex][i], _v, _check);
}
}
// 해당 정점에 인접한 정점들 모두 탐색 후 진행
void bfs(int _vertex, vector<vector<int>> &_v,
vector<bool>& _check)
{
//if (_check[_vertex] == true)
// return;
// 큐를 사용하자.
queue<int> q;
q.push(_vertex);
while (!q.empty())
{
int target = q.front();
q.pop();
if (_check[target] == false)
{
_check[target] = true;
cout << target << " ";
}
else
continue;
// 해당 타겟에 인접한 정점들부터 접근하자.
for (int i = 0; i < _v[target].size(); ++i)
{
q.push(_v[target][i]);
}
}
}
int main()
{
//sync_with_studio(false);
cin.tie(NULL);
cout.tie(NULL);
int n, m, v;
cin >> n >> m >> v;
vector<vector<int>>vv(n + 1);
vector<bool> check(n + 1, false);
int a, b = 0;
for (int i = 0; i < m; ++i)
{
cin >> a >> b;
// 문제에서 양방향이라고 전제 조건 제시함.
vv[a].push_back(b);
vv[b].push_back(a);
}
for (int i = 1; i <= n; ++i)
{
sort(vv[i].begin(), vv[i].end());
}
// 1 : 2 3 4
// 2 : 4
// 3 : 4
dfs(v, vv, check);
cout << endl;
// dfs 끝.
for (int i = 0; i < n + 1; ++i)
{
check[i] = false;
}
// bfs 시작
bfs(v, vv, check);
}
주의할 점
: 입출력 tie 해야 함.
놓친 부분
: vector 배열 정렬할 때 마지막 for문 등호 빼먹음..