๐ก ์กฐ๊ฑด ๋ฐ ํ์ด
1๋ฒ๋ถํฐ N๋ฒ๊น์ง์ ๋์
์ M๊ฐ์ ๋จ๋ฐฉํฅ ๋๋ก
๊ฐ ์กด์ฌ. ๋ชจ๋ ๋๋ก์ ๊ฑฐ๋ฆฌ๋ 1.
- ํน์ ํ ๋์
X
๋ก๋ถํฐ ์ถ๋ฐํ์ฌ ๋๋ฌํ ์ ์๋ ๋ชจ๋ ๋์ ์ค์์, ์ต๋จ ๊ฑฐ๋ฆฌ
๊ฐ ์ ํํ K
์ธ ๋ชจ๋ ๋์๋ค์ ๋ฒํธ๋ฅผ ์ถ๋ ฅ.
- BFS ์ ํ์ ๋ฌธ์
- ๋๋ฌํ ์ ์๋ ๋์ ์ค์์, ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ K์ธ ๋์๊ฐ ํ๋๋ ์กด์ฌํ์ง ์์ผ๋ฉด -1์ ์ถ๋ ฅ
๐ฅ ์์ค ์ฝ๋
from sys import stdin
from collections import deque
n, m, k, x = map(int, stdin.readline().split())
graph = [[] for _ in range(n + 1)]
for i in range(m):
a, b = map(int, stdin.readline().split())
graph[a].append(b)
def bfs(x):
res = []
visited = set()
q = deque()
q.append((x, 0))
visited.add(x)
while q:
now, cost = q.popleft()
if cost == k:
res.append(now)
for i in graph[now]:
if i not in visited:
q.append((i, cost + 1))
visited.add(i)
if not res:
print(-1)
else:
res.sort()
for i in res:
print(i)
bfs(x)
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์
4 4 2 1
1 2
1 3
2 3
2 4
์คํ๊ฒฐ๊ณผ
4
โจ๏ธ ๋ฌธ์ ํ์ด
- ๋ชจ๋ ๋์๊ฐ 1๋ถํฐ ์์ํ๊ธฐ ๋๋ฌธ์
graph
๋ฆฌ์คํธ์ ๊ธธ์ด๋ฅผ n + 1
๋ก ํ๋ค.
- ๋จ๋ฐฉํฅ ๊ฐ์ ์ด๊ธฐ ๋๋ฌธ์
graph[a].append(b)
bfs(x)
์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ์ฉ ์๋ฃ๊ตฌ์กฐ๋ฅผ list
๊ฐ ์๋ set
์ผ๋ก ์ฌ์ฉํ๋ค.
queue
์๋ ํ์ฌ ๋
ธ๋์ ๋น์ฉ์ ๋ํด์ ํํ๋ก ๋ง๋ค์ด ๋ฃ์ด์ค๋ค.
๋จ, ์ด๋ฏธ ๋ฐฉ๋ฌธํ๋ ๋
ธ๋๋ ๋ค์ ๋ฐฉ๋ฌธํ์ง ์๋๋ค. = visited
๐พ ๋๋์
- ๋ค์ต์คํธ๋ผ, BFS ๋ฌธ์ ์ ์ ํ์ ๋ ๋ง์ด ํ์ด๋ด์ผ๊ฒ ๋ค.
- ๊ฐ๋
์ด ์กฐ๊ธ ์ตํ์ ธ ์๋ ๋ค์ต์คํธ๋ผ ๊ธฐ๋ณธ ๋ฌธ์ ๋ฅผ ํ์ด์ ์ฝ๊ฒ ํ ์ ์์๋ค.
- ํ๋ก์ด๋ ์์ฌ๋ก๋ ์๋ํด๋ณด์ง ์์๋ค.