๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป Programming/์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ…Œ์ŠคํŠธ

[python] ๋ฐฑ์ค€18352_ํŠน์ • ๊ฑฐ๋ฆฌ์˜ ๋„์‹œ ์ฐพ๊ธฐ (DFS&BFS)

by ๋ญ…์ฆค 2022. 2. 6.
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

ํ’€์ด

'๋ชจ๋“  ๋„๋กœ์˜ ๊ฑฐ๋ฆฌ๋Š” 1'์ด๋ผ๋Š” ์กฐ๊ฑด ๋•๋ถ„์— BFS๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

์ฝ”๋“œ

from collections import deque

n,m,k,x = map(int,input().split())  # ๋„์‹œ ๊ฐœ์ˆ˜, ๋„๋กœ ๊ฐœ์ˆ˜, ๊ฑฐ๋ฆฌ ์ •๋ณด, ์ถœ๋ฐœ ๋„์‹œ ๋ฒˆํ˜ธ
graph = [[] for _ in range(n+1)]    # ๋„์‹œ ๊ฐœ์ˆ˜ ๋งŒํผ graph ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ

for _ in range(m):                  # ๋„๋กœ ์ •๋ณด ์ž…๋ ฅ๋ฐ›์•„์„œ graph ์— ์ •์žฅ
    a, b = map(int,input().split())
    graph[a].append(b)

distance = [-1]*(n+1)   # ๋ชจ๋“  ๊ฑฐ๋ฆฌ๋Š” -1 ๋กœ ์ดˆ๊ธฐํ™”
distance[x] = 0         # ์ถœ๋ฐœ ๋„์‹œ ๊ฑฐ๋ฆฌ๋Š” 0

q = deque([x])          # ์ถœ๋ฐœ ๋„์‹œ๋ฅผ ํ์— ๋„ฃ๊ณ 

while q:
    now = q.popleft()   # ํ˜„์žฌ ๋„์‹œ pop ํ•ด์„œ

    for next_node in graph[now]:                    # ํ˜„์žฌ ๋„์‹œ์—์„œ ์—ฐ๊ฒฐ๋œ ๋„์‹œ(๋…ธ๋“œ) ํƒ์ƒ‰
        if distance[next_node] == -1 :              # next_node๋ฅผ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜์œผ๋ฉด
            distance[next_node] = distance[now] + 1 # next_node์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ ๊ฐฑ์‹ 
            q.append(next_node)                     # ํ์— next_node appendํ•ด์„œ ๋ฐ˜๋ณต

check = False
for i in range(1, n+1):     # distance๊ฐ€ k์ธ ๋„์‹œ ์žˆ์œผ๋ฉด ์ถœ๋ ฅ
    if distance[i] == k:
        print(i)
        check = True

if check == False:          # distance๊ฐ€ k์ธ ๋„์‹œ๊ฐ€ ํ•˜๋‚˜๋„ ์—†์œผ๋ฉด -1 ์ถœ๋ ฅ
    print(-1)
๋ฐ˜์‘ํ˜•