๋ฌธ์ ๋งํฌ: www.acmicpc.net/problem/18352
๋ฌธ์ ์ค๋ช
- BFS๋ฅผ ์ด์ฉํ์ฌ ๋์๋ฅผ ๋ชจ๋ ๋ฐฉ๋ฌธํ๋ ๋ฐฉ๋ฒ์ ์ด์ฉํ์๋ค.
- BFS๋ฅผ ํ๋ ์ค ๋ง์ฝ ํ์ฌ ๋์์ ์ต๋จ ๊ฑฐ๋ฆฌ ๊ฐ์ด k ๋ณด๋ค ํด ๊ฒฝ์ฐ, ์ด ๋ค์ ๋ฐฉ๋ฌธํ๋ ๋์๋ค์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ ๋ชจ๋ k๋ณด๋ค ํฌ๋ฏ๋ก BFS๋ฅผ ์ค์งํ๋ค.
solution ํจ์ ์ค๋ช
- ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ k์ธ ๋์๋ค์ ๋ด์ ๋ฆฌ์คํธ answer ์ด๊ธฐํ
- ์ถ๋ฐ ๋์๋ฅผ ํ์ ์ฝ์ ํ๊ณ , ์ถ๋ฐ ๋์์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ 0์ผ๋ก ์ฒ๋ฆฌ
- ํ์์ ์์๋ฅผ ํ๋ ๊บผ๋ด๊ณ ๋ง์ฝ ํด๋น ์์์ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ k๋ผ๋ฉด answer์ ์ฝ์
- ๊ฐ๋ฅํ ๊ฒฝ์ฐ ํด๋น ์์์ ์ธ์ ํ ๋์๋ค์ ์ต๋จ ๊ฑฐ๋ฆฌ ํ ์ด๋ธ ๊ฐฑ์
- 3~4๋ฅผ ํ์ฌ ๋ฐฉ๋ฌธ ๋์์ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ k ์ดํ์ผ ๋ ๋ฐ๋ณต
์์ค์ฝ๋
from collections import deque
import sys
input = sys.stdin.readline
INF = int(1e9)
# ๋์ ๊ฐ์, ๋๋ก ๊ฐ์, ์ต๋จ ๊ฑฐ๋ฆฌ, ์ถ๋ฐ ๋์
n, m, k, x = map(int, input().split())
# ๊ฐ ๋์์ ์ฐ๊ฒฐ๋ ๋๋ก ์ ๋ณด๋ฅผ ๋ด๋ ๋ฆฌ์คํธ
graph = [[] for i in range(n + 1)]
# ์ต๋จ ๊ฑฐ๋ฆฌ ํ
์ด๋ธ
distance = [INF] * (n + 1)
# ๋ชจ๋ ๋๋ก ์ ๋ณด ์
๋ ฅ ๋ฐ๊ธฐ
for _ in range(m):
i, j = map(int, input().split())
graph[i].append(j) # ๋์ i์์ ๋์ j๊น์ง ๋๋ก๊ฐ ์กด์ฌ
def solution(start):
answer = []
queue = deque([start])
distance[start] = 0
# bfs ๋ฐฉ์์ผ๋ก ์ธ์ ๋์๋ค ๋ฐฉ๋ฌธ
while queue:
v = queue.popleft()
if distance[v] == k:
answer.append(v)
if distance[v] > k: # ๋๋จธ์ง ๋์๋ค์ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ k ์ด์
return answer
for x in graph[v]:
# ํ์ฌ ๋์ v๋ฅผ ๊ฑฐ์ณ์ ๋์ x๊น์ง ๊ฐ๋๊ฒ ๋ ์งง์ ๊ฒฝ์ฐ
if distance[v] + 1 < distance[x]:
distance[x] = distance[v] + 1
queue.append(x)
return answer
answer = solution(x)
if answer:
answer.sort()
for x in answer: print(x)
else:
print(-1)
728x90
'Algorithm > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค(BOJ) / Python] 1463๋ฒ: 1๋ก ๋ง๋ค๊ธฐ (0) | 2021.03.30 |
---|---|
[๋ฐฑ์ค(BOJ) / Python] 1010๋ฒ: ๋ค๋ฆฌ ๋๊ธฐ (0) | 2021.03.30 |
[๋ฐฑ์ค(BOJ) / Python] 10026๋ฒ: ์ ๋ก์์ฝ (0) | 2021.03.16 |
[๋ฐฑ์ค(BOJ) / Python] 1260๋ฒ: DFS์ BFS (0) | 2021.03.15 |
[๋ฐฑ์ค(BOJ) / Python] 1946๋ฒ: ์ ์ ์ฌ์ (0) | 2021.03.09 |