본문 바로가기
알고리즘/python

18352번 특정 거리의 도시 찾기(python3)

by 펀구구 2022. 1. 23.

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

N, M, K, X = map(int, input().split())
Map = [[] for _ in range(N+1)]
for i in range(M):
    x, y = map(int, input().split())
    Map[x].append(y)
distance = [-1] * (N + 1)


#print(Map)
def bfs(Map, X):
    queue = deque()
    distance[X] = 0
    queue.append(X)
    while queue:
        now = queue.popleft()
        for i in Map[now]:
            if distance[i] == -1:
                queue.append(i)
                distance[i] = distance[now] + 1

bfs(Map, X)
#print(distance)
check = False
for i in range(len(distance)):
    if distance[i] == K:
        print(i)
        check = True

if not check:
    print(-1)

문제 풀이중에 거리를 어떻게 적용해야할지 모르겠어서 찾아보았다.

따로 방문했다는 표시만 하는 것이 아니라 distance배열을 도입해서 도시에 처음 방문을 하면 전 도시의 거리에서 +1를해서 거리를 계산했다.