๊ทธ๋ํ์์ ๊น์ ๋ถ๋ถ์ ์ฐ์ ์ ์ผ๋ก ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ
#Stack #์คํ #์ฌ๊ท #์ํ #๋ฌดํ๋ฃจํํ์ถ #Back-Tracking
๊ทธ๋ํ์์ ๊ฐ๊น์ด ๋
ธ๋๋ถํฐ ์ฐ์ ์ ์ผ๋ก ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ
#Queue #ํ
n,s(start),e(end),m,๋
ธ๋๋ค์ ์ ์ฅํ๊ณ , dfs()
ํจ์๋ฅผ ํตํด start==end
์ผ ๋, dep์ ์ถ๋ ฅํ์
n,s(start),e(end),m,๋
ธ๋๋ค์ ์ ์ฅํ๊ณ , bfs()
ํจ์๋ฅผ ํตํด res์ ์ด์๋ฅผ ์ ์ฅํด๊ฐ๋ฉด์
ํ๊ฐ ๋น์์ ๋ res๋ฅผ ์ถ๋ ฅํ์
1e9
๋ก ์ด๊ธฐํํ์ฌdfs()
์์ start == end
์ผ ๋, visited[end]๊ฐ์ ์ถ๋ ฅํ์โ visited๋ฅผ 1e9๋ก ์ด๊ธฐํํ๋ ์ด์
dfs()๋ฅผ ํธ์ถํ ๋๋ง๋ค dep๋ฅผ ์ฆ๊ฐ์์ผ์ ํ๋ผ๋ฏธํฐ๋ก ๋๊ธธ๊ป๋ฐ,
visited[end]์ ์ ์ฅ๋ ๊ฐ๊ณผ dep๋ฅผ ๋น๊ตํ์ฌ
๋ ์์ ๊ฐ์ ์ต์ข
visited[end]์ ๋ฃ์ด ๋ฐํํ ๊บผ๋๊น!
False
๋ก, res(list)๋ฅผ ์ด๊ธฐํํ์bfs()
์ start
๊ฐ์ ํ์ ๋ฃ์ด, ํ๋์ฉ ๊บผ๋ด๋ฉด์ ๋ฐฉ๋ฌธํ์ ์ด ์์ผ๋ฉด res๋ฅผ ์ฆ๊ฐ์ํค์bfs()
ํจ์ ์ข
๋ฃ ํ res[end] > 0
์ด๋ฉด ๋ฐฉ๋ฌธํ์ ์ด ์๋ค๋ ๋ป์ด๋ฏ๋ก ํธ์ถ,import sys
input = sys.stdin.readline
n = int(input().rstrip())
start,end = map(int, input().split())
m = int(input().rstrip())
node = [map(int, input().split())for _ in range(m)]
visited = [1e9]*(n+1)
#์ธ๋ฑ์ฑํ๊ธฐ
amap = [[] for _ in range(n+1)]
for x,y in node:
amap[x].append(y)
amap[y].append(x)
#DFS
def dfs(start, end, amap, dep):
if start == end:
visited[end] = min(visited[end],dep)
return
for i in amap[start]:
#๋ฐฉ๋ฌธํ ์ ์ด ์์ผ๋ฉด ๋ฐฉ๋ฌธํ์ฌ dep ์ ์ฅ
if visited[i] > dep:
visited[i] = dep
dfs(i, end, amap, dep+1)
dfs(start, end, amap, 1)
#visited[end]๊ฐ์ด 1e9์ด๋ฉด ๋ฐฉ๋ฌธํ ์ ์ด ์๋ค๋ ๋ป์ด๋๊น
if visited[end] == 1e9:
print(-1)
else:
print(visited[end])
import sys
from collections import deque
input = sys.stdin.readline
n = int(input())
start, end = map(int, input().split())
m = int(input())
node = [list(map(int, input().split())) for _ in range(m)]
visited = [False]*(n+1)
res = [0]*(n+1)
#์ธ๋ฑ์ฑํ๊ธฐ
rel = [[] for _ in range(n+1)]
for u,v in node:
rel[u].append(v)
rel[v].append(u)
#BFS
def bfs(start):
queue = deque()
queue.append(start)
visited[start] = True
#ํ๊ฐ ๋น ๋๊น์ง ์คํ
while queue:
#์ ์ผ ๋จผ์ ๋ค์ด์จ ๊ฐ๋ถํฐ ๊ฒ์ฌ
v = queue.popleft()
for i in rel[v]:
if not visited[i]:
queue.append(i)
#ํจ์ ๋ฐ์ ์๋ res์ ํ์ฌ๋
ธ๋(v)์์ ์ด์๋ฅผ ์ ์ฅ
res[i] = res[v]+1
visited[i] = True
bfs(start)
#res[end]๊ฐ์ด 0์ด๋ฉด ๋ฐฉ๋ฌธํ ์ ์ด ์๋ค๋ ๋ป์ด๋๊น
if res[end] > 0:
print(res[end])
else:
print(-1)
๋ด ํฌ์คํ
: [Python/ํ์ด์ฌ][๐ฅ2] ๋ฐฑ์ค ์๊ณ ๋ฆฌ์ฆ 1260 - DFS์ BFS
1. DFS์ BFS์ค ์ ํ, ์ธ๋ฑ์ฑ/์ธ์ ํ๋ ฌ์ค ์ ํ์ด ๊ด๊ฑด์ธ ๊ฒ ๊ฐ๋ค.
(์ ํฌ์คํ
์์ ๋ค๋ค๋ฏ์ด ๋ฐฉ๋ฒ์ด ๋๋ฌด ๋ค์ํด์ ์ค๊ณ ์ ๋ฐฉ๋ฒ์ ์ ํํ๋ ๊ฒ์ด ๊ด๊ฑด)