๐ง๐ป [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)
'์๊ณ ๋ฆฌ์ฆ > DFS BFS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 7569 ํ ๋งํ (0) | 2023.02.13 |
---|---|
[Python] ๋ฐฑ์ค 7576 ํ ๋งํ (0) | 2023.02.13 |
[Python] ๋ฐฑ์ค 24481 ์๊ณ ๋ฆฌ์ฆ ์์ DFS (์ฌ๊ท!!!) (0) | 2023.02.11 |
[Python] ๋ฐฑ์ค 1388 ๋ฐ๋ฅ ์ฅ์ (4) | 2023.02.08 |
[Python] ๋ฐฑ์ค 1260 DFS์ BFS (0) | 2023.02.06 |