Dijkstra

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ Dynamic Programming์„ ํ™œ์šฉํ•œ ์ตœ๋‹จ๊ฒฝ๋กœ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํŠน์ •ํ•œ ํ•˜๋‚˜์˜ ์ •์ ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ์ •์ ์œผ๋กœ ๊ฐ€๋Š” ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์•Œ๋ ค์ค€๋‹ค. ํ•˜์ง€๋งŒ ์ด๋•Œ ์Œ์˜ ๊ฐ„์„ ์„ ํฌํ•จํ•  ์ˆ˜ ์—†๋‹ค.

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด Dynamic Programming ๋ฌธ์ œ์ธ ์ด์œ ๋Š” ์ตœ๋‹จ ๊ฒฝ๋กœ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฆ‰, ์ž‘์€ ๋ฌธ์ œ๊ฐ€ ํฐ ๋ฌธ์ œ์˜ ๋ถ€๋ถ„ ์ง‘ํ•ฉ์— ์†ํ•ด์žˆ๋‹ค.

๋™์ž‘ ๊ณผ์ •

  1. ์ถœ๋ฐœ ๋…ธ๋“œ๋ฅผ ์„ค์ •

  2. ์ถœ๋ฐœ ๋…ธ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฐ ๋…ธ๋“œ์˜ ์ตœ์†Œ ๋น„์šฉ์„ ์ €์žฅ

  3. ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š๋Š” ๋…ธ๋“œ ์ค‘ ๊ฐ€์žฅ ๋น„์šฉ์ด ์ ์€ ๋…ธ๋“œ ์„ ํƒ

  4. ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ์„œ ํŠน์ • ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์ตœ์†Œ ๋น„์šฉ ๊ฐฑ์‹ 

  5. 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