BFS
import sys
from collections import deque
input = sys.stdin.readline
n, m, k, x = map(int, input().split())
graph = [[] for _ in range(n+1)]
for _ in range(m):
a, b = map(int, input().split())
graph[a].append(b)
visited = [False]*(n+1)
distance = [-1]*(n+1)
def bfs(graph, v):
q = deque([v])
visited[v] = True
distance[v] = 0
while q:
v = q.popleft()
for i in graph[v]:
if not visited[i]:
q.append(i)
visited[i] = True
distance[i] = distance[v] + 1
bfs(graph, x)
result = []
for i in range(1, n+1):
if distance[i] == k:
result.append(i)
if result:
print(*result, sep='\n')
else:
print(-1)
다익스트라
import sys
import heapq
input = sys.stdin.readline
n, m, k, x = map(int, input().split())
graph = [[] for _ in range(n+1)]
for _ in range(m):
a, b = map(int, input().split())
graph[a].append(b)
INF = int(1e9)
distance = [INF]*(n+1)
def dijkstra(start):
q = []
heapq.heappush(q, (0, start))
distance[start] = 0
while q:
dist, now = heapq.heappop(q)
if distance[now] < dist:
continue
for i in graph[now]:
cost = dist + 1
if cost < distance[i]:
distance[i] = cost
heapq.heappush(q, (cost, i))
dijkstra(x)
result = []
for i in range(1, n+1):
if distance[i] == k:
result.append(i)
if result:
print(*result, sep='\n')
else:
print(-1)