https://www.acmicpc.net/problem/18352
문제 풀이:
BFS를 사용해서 그래프를 탐색하면서 최단 거리를 dist[] 배열에 저장하였고, 탐색이 끝난 후에 dist 배열을 돌면서 값이 K인 경우를 출력하였다. K인 경우가 없을 때는 -1을 출력하였다.
import sys
from collections import deque
N, M, K, X = map(int, sys.stdin.readline().split())
graph = [[] for _ in range(N+1)]
for _ in range(M):
A, B = map(int, sys.stdin.readline().split())
graph[A].append(B)
q = deque()
q.append(X)
dist = [-1]*(N+1)
dist[X]=0
visit = [False]*(N+1)
visit[X] = True
while(q):
n = q.popleft()
for i in graph[n]:
if (visit[i]==False):
visit[i] = True
dist[i] = dist[n]+1
q.append(i)
flag = False
for i in range(1,N+1):
if (dist[i]==K):
print(i)
flag = True
if (flag==False):
print(-1)
어려웠던 점:
오랜만에 푸니까 BFS 탐색 방법이 헷갈려서 헤맸다. 복습과 꾸준한 문제풀이는 중요하다..
'알고리즘💻 > 그래프(DFS&BFS)' 카테고리의 다른 글
21316번: 스피카 (0) | 2021.08.08 |
---|---|
BOJ 14496번: 그대, 그머가 되어 (0) | 2021.05.25 |
BOJ 10971번: 외판원 순회 2 (0) | 2021.05.12 |
BOJ 19621번: 회의실 배정2 (0) | 2021.05.12 |
BOJ 1987번: 알파벳 (0) | 2021.02.08 |