
변형없이 베이직하게 BFS DFS 구현하는 문제입니다.
개념 복기하기 좋은 문제.
입력으로 정점의 수, 간선의 수, 시작노드를 입력받고 간선정보가 주어집니다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.*;
public class Main{
static boolean[] visited;
static LinkedList<Integer>[] adjList;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int v = Integer.parseInt(st.nextToken());
adjList = new LinkedList[n+1];
for(int i=1; i<n+1; i++){
adjList[i] = new LinkedList<Integer>();
}
for(int i=0 ; i<m; i++){
st = new StringTokenizer(br.readLine());
int v1 = Integer.parseInt(st.nextToken());
int v2 = Integer.parseInt(st.nextToken());
adjList[v1].add(v2);
adjList[v2].add(v1);
}
for(int i=1; i<n+1; i++){
Collections.sort(adjList[i]);
}
visited = new boolean[n+1];
DFS(v);
System.out.println();
visited = new boolean[n+1];
BFS(v);
}
private static void BFS(int v) {
Queue<Integer> q = new LinkedList<>();
visited[v] = true;
q.add(v);
while(!q.isEmpty()){
int nowNode = q.poll();
System.out.print(nowNode+" ");
for(int t : adjList[nowNode]){
if(visited[t] != true){
visited[t]= true;
q.add(t);
}
}
}
}
public static void DFS(int v){
visited[v] = true;
System.out.print(v+" ");
for(int t : adjList[v]){
if(!visited[t]){
DFS(t);
}
}
}
}