특정한 도시 X로부터 출발하여 도달할 수 있는 모든 도시 중에서, 최단 거리가 정확히 K인 모든 도시들의 번호를 출력하는 프로그램을 작성하시오.
https://www.acmicpc.net/problem/18352
전형적인 BFS 문제이다.
단방향 도로이기 때문에 city[a].append(b)
한 줄만 써준다.
만약 양방향이라면 city[b].append(a)
반대쪽도 추가해줘야 한다.
d
라는 거리 리스트에 각 거리들을 저장한다.
d[i] = d[node] + 1
# -1로 방문 리스트 생성
visited = [-1] * (n+1)
# 처음 방문 하는 곳은 0
visited[start] = 0
# 만약 방문하지 않았다면
if visited[i] == -1:
visited[i] = visited[node] + 1
import sys
from collections import deque
input = sys.stdin.readline
n, m, k, x = map(int, input().split())
city = [[] for _ in range(n+1)]
for i in range(m):
a, b = map(int, input().split())
city[a].append(b)
visited = [0] * (n+1)
d = [0] * (n+1)
result = []
def bfs(start):
queue = deque([start])
visited[start] = 1
while queue:
node = queue.popleft()
for i in city[node]:
if not visited[i]:
queue.append(i)
visited[i] = 1
d[i] = d[node] + 1
if d[i] == k:
result.append(i)
if result:
result.sort()
print(*result,sep='\n')
else:
print(-1)
bfs(x)