반응형
문제
https://www.acmicpc.net/problem/18352
문제 풀이
단방향 그래프에서 최단거리 찾기 위해 bfs 돌림. visited를 따로 두고 풀었는데, 다른 분들 풀이 보니까 그냥 각 노드에 대한 distance 배열을 만들어서 최단거리로 차차 갱신하며 푸는 법이 일반적 + 더 효율적인듯
코드
import sys
input = sys.stdin.readline
import collections
N, M, K, X = map(int,input().split())
MAP = [[] for _ in range(N)]
for _ in range(M):
A, B = map(int,input().split())
MAP[A-1].append(B-1)
q = collections.deque()
q.append((X-1,0))
res = set()
visited = [0 for _ in range(N)]
visited[X-1] = 1
while q:
cur_idx, cnt = q.popleft()
if cnt == K:
res.add(cur_idx+1)
if cnt == K+1:
break
for n_idx in MAP[cur_idx]:
if visited[n_idx] == 0:
q.append((n_idx, cnt + 1))
visited[n_idx] = 1
if not res:
print(-1)
else:
print(*sorted(res), sep='\n')
반응형
'알고리즘 > 백준 문제풀이' 카테고리의 다른 글
[boj] 백준 2468 안전 영역 python 풀이(bfs) (0) | 2023.07.25 |
---|---|
[boj] 백준 15663 N과 M (9) python 풀이 (0) | 2023.07.23 |
[boj] 백준 11444 피보나치 수 6 python 풀이 (0) | 2023.07.21 |
[boj] 백준 2589 보물섬 python 풀이 (0) | 2023.07.18 |
[boj] 백준 7569 토마토 python 풀이 (0) | 2023.06.16 |