문제

링크

풀이

#include <iostream>
#include <vector>
#include <queue>
using namespace std;
 
void dfs(vector<vector<bool> > &p, vector<bool> &visited, int cur) {
  visited[cur] = true;
  cout << cur << " ";
  
  for (int i=1; i<p.size(); i++) {
    if (p[cur][i] && !visited[i]) {
      dfs(p, visited, i);
    }
  }
}
 
void bfs(vector<vector<bool> > &p, vector<bool> &visited, int cur) {
  queue<int> q;
  q.push(cur);
  visited[cur] = true;
 
  while (!q.empty()) {
    cur = q.front();
    q.pop();
    cout << cur << " ";
 
    for (int i=1; i<p.size(); i++) {
      if (p[cur][i] && !visited[i]) {
        q.push(i);
        visited[i] = true;
      }
    }
  }
}
 
void solve(void) {
  int n, m, v, x, y;
  cin >> n >> m >> v;
  vector<vector<bool> > p(n+1, vector<bool>(n+1, false));
  for (int i=0; i<m; i++) {
    cin >> x >> y;
    p[x][y] = p[y][x] = true;
  }
 
  vector<bool> visited(n+1, false);
  dfs(p, visited, v);
  cout << "\n";
 
  fill(visited.begin(), visited.end(), false);
  bfs(p, visited, v);
}
 
int main(void) {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
 
  solve();
  return 0;
}