Dijkstra
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ Dynamic Programming์ ํ์ฉํ ์ต๋จ๊ฒฝ๋ก ํ์ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ํน์ ํ ํ๋์ ์ ์ ์์ ๋ค๋ฅธ ๋ชจ๋ ์ ์ ์ผ๋ก ๊ฐ๋ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์๋ ค์ค๋ค. ํ์ง๋ง ์ด๋ ์์ ๊ฐ์ ์ ํฌํจํ ์ ์๋ค.
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ด Dynamic Programming ๋ฌธ์ ์ธ ์ด์ ๋ ์ต๋จ ๊ฒฝ๋ก๋ ์ฌ๋ฌ ๊ฐ์ ์ต๋จ ๊ฒฝ๋ก๋ก ์ด๋ฃจ์ด์ ธ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ฆ, ์์ ๋ฌธ์ ๊ฐ ํฐ ๋ฌธ์ ์ ๋ถ๋ถ ์งํฉ์ ์ํด์๋ค.
๋์ ๊ณผ์
์ถ๋ฐ ๋ ธ๋๋ฅผ ์ค์
์ถ๋ฐ ๋ ธ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ ๋ ธ๋์ ์ต์ ๋น์ฉ์ ์ ์ฅ
๋ฐฉ๋ฌธํ์ง ์๋ ๋ ธ๋ ์ค ๊ฐ์ฅ ๋น์ฉ์ด ์ ์ ๋ ธ๋ ์ ํ
ํด๋น ๋ ธ๋๋ฅผ ๊ฑฐ์ณ์ ํน์ ๋ ธ๋๋ก ๊ฐ๋ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํ์ฌ ์ต์ ๋น์ฉ ๊ฐฑ์
3~4๋ฒ์ ๋ฐ๋ณตํ๋ค.
def dijkstra(start):
q = []
distance = [sys.maxsize] * (n + 1)
distance[start] = 0
visited = [False] * (n + 1)
heapq.heappush(0, (0, start))
while q:
dist, node = heapq.heappop(q)
if visited[node]:
continue
for i in range(1, n+1):
if cost[node][i] == sys.maxsize:
continue
if distance[i] > distance[node] + cost[node][i]:
distance[i] = distance[node] + cost[node][i]
visited[node] = False
heapq.heappush(q, (distance[i], i))heapq์ ํํ์ด ์ฝ์ ๋ ๊ฒฝ์ฐ์, ํํ์ ์ฒซ ๋ฒ์งธ ์์๊ฐ ์ ๋ ฌ์ ๊ธฐ์ค์ด ๋๋ค.
Last updated