💡Problem Solving/BOJ
[BOJ 18352] 특정 거리의 도시 찾기 (Python)
gom20
2022. 11. 17. 10:47
문제
https://www.acmicpc.net/problem/18352
18352번: 특정 거리의 도시 찾기
첫째 줄에 도시의 개수 N, 도로의 개수 M, 거리 정보 K, 출발 도시의 번호 X가 주어진다. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N) 둘째 줄부터 M개의 줄에 걸쳐서 두 개
www.acmicpc.net
풀이
BFS로 최단 거리를 만족하는 노드를 저장한다.
최단 거리 이후의 도시는 방문할 필요 없으므로 큐에 넣지 않는다
소스코드
from collections import deque
import sys
input = sys.stdin.readline
# n노드, m간선, k최단거리, x시작노드
n, m, k, x = map(int, input().rstrip().split())
graph = [[] for _ in range(n+1)]
# 간선 정보 입력 받기
for _ in range(m):
a, b = map(int, input().split())
graph[a].append(b)
def bfs(graph, start, k):
result = []
visited = [False] * (n + 1)
que = deque()
visited[start] = True
que.append((start, 0))
while que:
now, dist = que.popleft()
flag = True if dist == k-1 else False
for adj in graph[now]:
if visited[adj]:
continue
else:
visited[adj] = True
if flag:
result.append(adj)
else:
que.append((adj, dist + 1))
if len(result) == 0:
print(-1)
else:
result.sort()
for r in result:
print(r)
bfs(graph, x, k)