문제

코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
public class q24444 {
static int[] visited;
static ArrayList<ArrayList<Integer>> graph;
static ArrayList<Integer> queue = new ArrayList<>();
static int visitCount = 0;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String[] input = br.readLine().split(" ");
int N = Integer.parseInt(input[0]);
int M = Integer.parseInt(input[1]);
int R = Integer.parseInt(input[2]);
visited = new int[N+1];
graph = new ArrayList<>();
for(int i=0; i<N+1; i++) graph.add(new ArrayList<>());
for(int i=0; i<M; i++) {
input = br.readLine().split(" ");
int u = Integer.parseInt(input[0]);
int v = Integer.parseInt(input[1]);
graph.get(u).add(v);
graph.get(v).add(u);
}
for(int i=1; i<graph.size(); i++) Collections.sort(graph.get(i));
bfs(R);
StringBuilder sb = new StringBuilder();
for(int i=1; i<N+1; i++) sb.append(visited[i]).append("\n");
bw.write(String.valueOf(sb));
bw.flush();
}
public static void bfs(int R) {
visited[R] = ++visitCount;
enqueue(R);
while(queue.size() != 0) {
int u = dequeue();
for(int v : graph.get(u)) {
if(visited[v] == 0) {
visited[v] = ++visitCount;
enqueue(v);
}
}
}
}
public static void enqueue(int v) {
queue.add(v);
}
public static int dequeue() {
int v = queue.get(0);
queue.remove(0);
return v;
}
}