최단거리를 구하는 문제이다.
BFS 알고리즘을 적용해보았다.
from collections import deque
import sys
f = sys.stdin.readline
n, m, k, x = map(int, f().split())
graph = [[] for _ in range(n+1)]
d = [0 for _ in range(n+1)]
visited = [False for _ in range(n+1)]
ans = []
for _ in range(m):
a, b = map(int, f().split())
graph[a].append(b)
def bfs(x):
queue = deque()
queue.append(x)
visited[x] = True
while queue:
s = queue.popleft()
if d[s] > k:
break
for i in graph[s]:
if visited[i] == False:
visited[i] = True
queue.append(i)
d[i] = d[s] + 1
if d[i] == k:
ans.append(i)
bfs(x)
if len(ans) == 0:
print(-1)
else:
for r in sorted(ans):
print(r)