from collections import deque def bfs(x): queue = deque() queue.append(x) distance[x] = 0 while queue: now = queue.popleft() for next_node in graph[now]: if visited[next_node] == False: visited[next_node] = True if distance[next_node] == -1: distance[next_node] = distance[now] + 1 queue.append(next_node) n, m, k, x = map(int, input().split()) graph = [[] for _ in range(n + 1)] for i in range(m): a, b = map(int, input().split()) graph[a].append(b) distance = [-1] * (n + 1) visited = [False] * (n + 1) bfs(x) result = [] check = False for i in range(1, n + 1): if distance[i] == k: result.append(i) check = True if len(result): for i in range(len(result)): print(result[i]) else: print(-1)
기초적인 다익스트라 문제이고, 다익스트라를 모르더라도 BFS를 아는 것만으로 풀 수 있다.
이 문제를 풀 시기에 다익스트라를 몰랐고, 현재도 다익스트라를 배웠지만 자주 안 쓰다보니 까먹었다!(다시 공부해야한다.)
이 문제는 단 방향 그래프이고, 방문 여부와 거리를 저장하기 위한 리스트를 만들어주었다.
bfs 를 통해 현재 위치에서 최단거리를 구하고, 이동거리를 저장하고 주어진 K와 같은 노드들을 출력해주면 된다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ] 12907 동물원 (0) | 2021.01.11 |
---|---|
[BOJ] 17472 다리 만들기 2 (0) | 2021.01.10 |
[BOJ] 20055 컨베이어 벨트 위의 로봇 (0) | 2021.01.10 |
[BOJ] 20056 마법사 상어와 파이어볼 (0) | 2021.01.10 |
[BOJ] 20057 마법사 상어와 토네이도 (0) | 2021.01.10 |