import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
static StringTokenizer st;
static int n; // 정점의 개수
static int m; // 간선의 개수
static int v; // 탐색 시작점
static int[][] graph;
static boolean[] visited;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
v = Integer.parseInt(st.nextToken());
graph = new int[n + 1][n + 1];
for (int i = 1; i <= m; i++) {
st = new StringTokenizer(br.readLine());
int s = Integer.parseInt(st.nextToken());
int e = Integer.parseInt(st.nextToken());
graph[s][e] = 1;
graph[e][s] = 1;
}
visited = new boolean[n + 1];
dfs(v);
System.out.println();
visited = new boolean[n + 1];
bfs(v);
}
static void dfs(int start) {
System.out.print(start + " ");
visited[start] = true;
for (int i = 1; i <= n; i++) {
if (graph[start][i] == 1 && !visited[i]) {
dfs(i);
}
}
}
static void bfs(int start) {
Queue<Integer> queue = new LinkedList<>();
queue.offer(start);
visited[start] = true;
while (!queue.isEmpty()) {
int node = queue.poll();
System.out.print(node + " ");
for (int i = 1; i <= n; i++) {
if (graph[node][i] == 1 && !visited[i]){
visited[i] = true;
queue.offer(i);
}
}
}
}
}
단순 bfs와 dfs문제여서 구현을 해보았는데 bfs에서 뭔가 코드가 찝찝한 느낌?... while문을 돌면서도 for문으로 확인을 하는데 뭔가 맘에 안드는 코드... 다른 분들 코드를 참고하고 스터디에서 코드리뷰를 받아본 후에 피드백을 반영해서 다시 고쳐야겠다 !!