Dijsktra (λ€μ΅μ€νΈλΌ)
μ΅λ¨ κ²½λ‘ νμ - 1
μ λ§ μ€λλ§μ ν¬μ€ν
μ΄λ€. μλ λͺ©νλλ‘ μ§ννμΌλ©΄ κ°κ°μ νκΈ° μ μ DPκΉμ§ ν¬μ€ν
μ νμ΄μΌνλλ° μμ μ‘°κΈ λ°λΉ΄λ€...(μ¬μ€ μμμ΄ μλκ±Έ μλ...) μλ¬΄νΌ μ΄λ² 3-1 κ³Όλͺ©μ μκ³ λ¦¬μ¦ μμ©μ΄λΌλ κ³Όλͺ©μ μκ°νλλ° μλ
μλ λ₯λ¬λκ³Ό κ΄λ ¨νμ¬ μμ
νλ€κ³ ν΄μ μ μ²νλλ° μ΄λ²μ κ΅μλμ΄ λ°λλ©΄μ μ λ§ μκ³ λ¦¬μ¦μ λν΄ νμ΅νλ μμ
μ΄ λμ΄λ²λ Έλ€. μ΄μ§ μμ¬μ μ§λ§ κ°μκ³νμλ₯Ό 보λ 2-2 μκ³ λ¦¬μ¦ μμ
κ³Ό κ±°μ λΉμ·ν΄μ? νκΈ° μ΄μ 미리미리 μ 리ν΄λλ €κ³ νλ€.
μλ‘ μ΄ κΈΈμλ€.
λ€μ΅μ€νΈλΌλ μ΅λ¨ κ²½λ‘λ₯Ό νμνλ μκ³ λ¦¬μ¦μ΄λ€.
λ€μκ³Ό κ°μ κ·Έλνμ μ΅λ¨ κ²½λ‘λ₯Ό νμν΄λ³΄μ.
graph λ³μμ μ°κ²°λ μ μ κ³Ό κ°μ€μΉκ° μ μ₯λμ΄ μλ€κ³ λ³Έλ€.
graph[1] = [2, 6], [3, 4], [4, 4]
graph[2] = [4, 5], [5, 7]
graph[3] = [6, 10]
graph[4] = []
graph[5] = [6, 2]
graph[6] = []
1 | 2 | 3 | 4 | 5 | 6 | |
Distance | 0 | INF | INF | INF | INF | INF |
Visit | False | False | False | False | False | False |
μ°μ κ° μ μ λ€κ°μ μ΅λ¨ 거리λ₯Ό μ μ₯ν λ³μκ° νμνλ€.
μ΄λ₯Ό distance[1] ~ distance[6] μΌλ‘ λνλ΄κ² λ€.
μΆκ°λ‘ distance λ³μλ₯Ό INFλ‘ μ΄κΈ°νλ₯Ό ν΄μ€μΌνλ€.
μμ§ νμνμ§ μμμΌλ―λ‘ λͺ¨λ μ μ λ€ κ°μ μ΅λ¨ κ±°λ¦¬κ° INFλΌκ³ κ°μ νλ€.
λΏλ§ μλλΌ λ°©λ¬Έν μ μ μμ νμνκΈ° μν λ³μκ° νμνλ€.
μ΄λ₯Ό visit[1] ~ visit[6] μΌλ‘ λνλ΄κ² λ€.
μ΄ μμ μμ§ λ°©λ¬Ένμ§ μμμΌλ―λ‘ Falseλ‘ μ΄κΈ°νλ₯Ό ν΄μ€μΌνλ€.
Queue | 1 |
Queueμλ μμ μ μ μ΄ λ€μ΄μκ³ , distance[μμ μ μ ] = 0μΌλ‘ μ΄κΈ°ν λμ΄μλ€κ³ λ³Έλ€.
1. Queueμμ μμ μ μ μ μ κ±°νκ³ μ°κ²°λ λ€λ₯Έ μ μ λ€μ μ΅λ¨ 거리λ₯Ό κ°±μ νλ€.
distance[2] = INF > distance[0] + 6 = 6 μ΄λ―λ‘ κ°±μ μ΄ κ°λ₯νλ€.
λ°λΌμ distance[2] = 6 κ° λλ€.
distance[3] = INF > distance[0] + 4 = 4 μ΄λ―λ‘ κ°±μ μ΄ κ°λ₯νλ€.
λ°λΌμ distance[3] = 4 κ° λλ€.
distance[4] = INF > distance[0] + 4 = 4 μ΄λ―λ‘ κ°±μ μ΄ κ°λ₯νλ€.
λ°λΌμ distance[4] = 4 κ° λλ€.
2. κ°±μ ν κ²½μ° ν΄λΉ μ μ κ³Ό μ΅λ¨ 거리λ₯Ό Queueμ λ£μ΄μ€λ€.
μ°μ μμνλ₯Ό μ¬μ©νκΈ° μν΄ νμ΄μ¬μ heapq λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμλ€. (μ΅μν)
Queue | (6, 2) | (4, 3) | (4, 4) |
3. ν΄λΉ μ μ μ λ°©λ¬Έ μ²λ¦¬ ν΄μ€λ€.
κ³Όμ μ΄ μ’ λ£λλ©΄ μλμ κ°μ΄ λ³μ κ°μ΄ λ³κ²½λλ€.
1 | 2 | 3 | 4 | 5 | 6 | |
Distance | 0 | 6 | 4 | 4 | INF | INF |
Visit | True | False | False | False | False | False |
4. Queueμμ μ΅λ¨κ±°λ¦¬κ° κ°μ₯ 짧μ μ μ μ μ κ±°νκ³ μ°κ²°λ λ€λ₯Έ μ μ λ€μ μ΅λ¨ 거리λ₯Ό κ°±μ νλ€.
distance[6] = INF > distance[3] + 10 = 14 μ΄λ―λ‘ κ°±μ μ΄ κ°λ₯νλ€.
λ°λΌμ distance[6] = 14 κ° λλ€.
5. κ°±μ ν κ²½μ° ν΄λΉ μ μ κ³Ό μ΅λ¨ 거리λ₯Ό Queueμ λ£μ΄μ€λ€.
Queue | (6, 2) | (4, 4) | (14, 6) |
6. ν΄λΉ μ μ μ λ°©λ¬Έ μ²λ¦¬ ν΄μ€λ€.
κ³Όμ μ΄ μ’ λ£λλ©΄ μλμ κ°μ΄ λ³μ κ°μ΄ λ³κ²½λλ€.
1 | 2 | 3 | 4 | 5 | 6 | |
Distance | 0 | 6 | 4 | 4 | INF | 14 |
Visit | True | False | True | False | False | False |
7. 4 ~ 6 κ³Όμ μ λ°λ³΅ν΄μ€λ€.
8. μ κ³Όμ μ Queueμ μμκ° μμ λκΉμ§ λ°λ³΅νλ©° κ³Όμ μ΄ μ’ λ£λλ©΄ μ΅μ’ ννλ μλμ κ°λ€.
1 | 2 | 3 | 4 | 5 | 6 | |
Distance | 0 | 6 | 4 | 4 | 2 | 4 |
Visit | True | True | True | True | True | True |
λ€μ΅μ€νΈλΌ μκ³ λ¦¬μ¦μμ λͺ μ¬ν΄μΌν μ μ
1. λ°©λ¬Έν λ Έλλ νμνμ§ μλλ€.
2. μ΅λ¨ κ±°λ¦¬κ° μ§§μ μ μ λΆν° νμν΄μΌνλ€.
3. μμ μ¬μ΄ν΄μ΄ μ‘΄μ¬νλ κ²½μ° μ΅λ¨ 거리 νμμ΄ μ μμ μΌλ‘ μ§νλμ§ μλλ€.
μ΄λ€.
μμ κ°λ μ νμ΄μ¬μΌλ‘ ꡬνν΄λ³΄μλ€. μ£Όμκ³Ό ν¨κ» λ¬μλμμΌλ μ°Έκ³ νκΈΈ λ°λλ€.
μμμ μΈκΈν κ·Έλνλ‘ μ λ ₯ κ°μ μ£Όλ©΄ μ΄λ‘ μμΌλ‘ ꡬν λ΅κ³Ό λμΌ ν κ²μ λ³Ό μ μλ€.
[Input]
6 8 # μ μ μ κ°μ, κ°μ μ κ°μ
1 2 3 4 5 6
1 2 6
1 3 4
1 4 4
1 5 2
2 4 5
2 5 7
3 6 10
5 6 2
1 # μμ μ μ
[Output]
μμ μ¬μ΄ν΄μ΄ μ‘΄μ¬νλ κ²½μ°λ λ€μ ν¬μ€ν μΈ λ²¨λ§ν¬λ μκ³ λ¦¬μ¦μ ν΅ν΄ μ€λͺ νλλ‘ νκ² λ€.
μΆ©λ¨λνκ΅ μ»΄ν¨ν°κ³΅νκ³Ό μ΄μμ κ΅μλμ μκ³ λ¦¬μ¦ μμ κ³Ό λλΉλμ μ νλΈ κ°μ’(https://youtu.be/611B-9zk2o4)λ₯Ό μ°Έκ³ νμ΅λλ€.
'βοΈ μκ³ λ¦¬μ¦ > Graph' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
6. Union Find(ν©μ§ν© μ°ΎκΈ°) : MST - 1 (0) | 2021.05.30 |
---|---|
5. Floyd Warshall(ν루μ΄λ μμ¬) : μ΅λ¨ κ²½λ‘ νμ - 3 (0) | 2021.03.31 |
4. Bellman-Ford(λ²¨λ§ ν¬λ) : μ΅λ¨ κ²½λ‘ νμ - 2 (0) | 2021.03.07 |
2. DFS(Depth-Find-Search) : κΉμ΄ μ°μ νμ (0) | 2021.01.22 |
1. BFS(Breath-Find-Search) : λλΉ μ°μ νμ (0) | 2021.01.21 |