๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜/DFS BFS

[Python] ๋ฐฑ์ค€ 2644 ์ดŒ์ˆ˜๊ณ„์‚ฐ

by JayAlex07 2023. 2. 9.

๐Ÿง‘‍๐Ÿ’ป [Python] ๋ฐฑ์ค€ 2644 ์ดŒ์ˆ˜๊ณ„์‚ฐ

Silver 2 - DFS / BFS

DFS๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, BFS๋ฅผ ์ด์šฉํ•ด์„œ ์ดŒ์ˆ˜๋ฅผ ์ฐพ์•˜๋‹ค

๋ถ€๋ชจ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋…ธ๋“œ๋“ค์„ ๋จผ์ € ํƒ์ƒ‰์„ ํ•œ๋‹ค

 

ํƒ์ƒ‰์„ ํ•˜๋ฉด์„œ ๊ฐ™์€ ๋ฒˆํ˜ธ๋ฅผ ์ฐพ์œผ๋ฉด ๋œ๋‹ค

 

๋ฌธ์ œํ’€์ด

  • BFS๋ฅผ ์ด์šฉํ•ด์„œ, ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค ์ค‘์—์„œ end์™€ ๊ฐ™์€ ๋ฒˆํ˜ธ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ์„ ํ•ด์•ผ ํ•œ๋‹ค
  • ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ while๋ฌธ์—์„œ ๊ทธ๋ƒฅ count๋ฅผ ๋„ฃ์œผ๋ฉด, queue์—์„œ ๋ฝ‘์„๋•Œ๋งˆ๋‹ค count์— 1์ด ๋”ํ•ด์ง„๋‹ค
    • ์ด๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด, queue์— ํŠœํ”Œ ํ˜•์‹์œผ๋กœ, (๋…ธ๋“œ๋ฒˆํ˜ธ, ์ดŒ์ˆ˜)๋ฅผ ๋„ฃ๋Š”๋‹ค

 

์ฝ”๋“œ

from collections import deque

n = int(input())
start, end = map(int, input().split())
start, end = start - 1, end - 1
m = int(input())

relations = [[] for _ in range(n)]
visited = [False] * n

for _ in range(m):
    x, y = map(int, input().split())
    relations[x-1].append((y-1, 0))
    relations[y-1].append((x-1, 0))

visited[start] = True
queue = deque([(start, 0)])


while queue:
    current, count = queue.popleft()

    if current == end:
        break

    for cur in relations[current]:
        if visited[cur[0]] == False:
            visited[cur[0]] = True
            queue.append((cur[0], count + 1))

if visited[end] == True:
    print(count)
else:
    print(-1)