시간 제한 : 2초, 난이도 : 실버 2, 백준 : 18352번
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.Scanner;
public class Practice46 {
static int visited[];
static ArrayList<Integer>[]A;
static int N, M, K, X;
static List<Integer> answer;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt(); //노드 수
M = sc.nextInt(); //에지의 수
K = sc.nextInt(); //최단 거리
X = sc.nextInt(); //시작점
A = new ArrayList[N + 1];
answer = new ArrayList<>();
for(int i = 1; i <= N; i++) {
A[i] = new ArrayList<Integer>();
}
for(int i = 0; i < M; i++) {
int S = sc.nextInt();
int E = sc.nextInt();
A[S].add(E);
}
visited = new int[N + 1];
for(int i = 0; i <= N ; i++) {
visited[i] = -1;
}
BFS(X);
for(int i = 0; i <= N; i++) {
if(visited[i] == K) {
answer.add(i);
}
}
if(answer.isEmpty()) {
System.out.println("-1");
}else {
Collections.sort(answer);
for(int temp:answer) {
System.out.println(temp);
}
}
sc.close();
}
private static void BFS(int Node) {
Queue<Integer> queue = new LinkedList<Integer>();
queue.add(Node);
visited[Node]++;
while(!queue.isEmpty()) {
int now_Node = queue.poll();
for(int i : A[now_Node]) {
if(visited[i] == -1) {
visited[i] = visited[now_Node] + 1;
queue.add(i);
}
}
}
}
}