💡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)

'💡Problem Solving > BOJ' 카테고리의 다른 글

[BOJ14888] 연산자 끼워 넣기 (Python)  (0) 2022.11.17
[BOJ 18405] 경쟁적 전염 (Python)  (0) 2022.11.17
[BOJ 3190] 뱀 (Python)  (0) 2022.11.16
[BOJ 1167] 트리의 지름 (Java)  (0) 2022.01.02
[BOJ 10159] 저울 (Java)  (0) 2022.01.01