-
[Python] DFSπΈ 2024. 6. 7. 00:41
DFS(Depth-First Search)
> κΉμ΄ μ°μ νμμΌλ‘, κ·Έλνμμ μμ§ μ°μ μΌλ‘ νμνλ€.
- κ·Έλν: λ Έλ(Node)μ κ°μ (Edge)μΌλ‘ νν
- κ·Έλν νμ: νλμ λ Έλλ₯Ό μμμΌλ‘ λ€μμ λ Έλλ₯Ό λ°©λ¬Ένλ κ². λ λ Έλκ° κ°μ μΌλ‘ μ°κ²°λμ΄ μμ λ, λ λ Έλλ μΈμ νλ€(Adjacent)λΌκ³ νλ€.
- μΈμ νλ ¬(Adjacency Matrix): 2μ°¨μ λ°°μ΄λ‘ κ·Έλνμ μ°κ²° κ΄κ³λ₯Ό νννλ λ°©μμΌλ‘, μ°κ²°λμ§ μμ λ
ΈλλΌλ¦¬λ 무νμ λΉμ©μ κ°μ νμ¬ κ°μ μ΄κΈ°ννλ€.
* νμ΄μ¬μ λ°°μ΄μ 리μ€νΈ μλ£νμΌλ‘ νν κ°λ₯νλ―λ‘, 리μ€νΈλ‘ ꡬννλ λ°©μμ μ ννλ€. - μΈμ 리μ€νΈ(Adjacency List): 리μ€νΈλ‘ κ·Έλνμ μ°κ²° κ΄κ³λ₯Ό νννλ λ°©μμΌλ‘, κ° λ Έλλ§λ€ μ°κ²°λ λ Έλμ λν μ 보λ₯Ό μ°κ²°νμ¬ μ μ₯
> DFSμ μ€ν μλ£κ΅¬μ‘°λ₯Ό νμ©ν λμ κ³Όμ
* μ€νμ λ Έλλ₯Ό μλ κ³Όμ μ 1κ°μ©(λ Έλ λ²νΈκ° μμ μμΌλ‘) μ§ννλ κ²½μ°
- νμ μμ λ Έλλ₯Ό μ€νμ μ½μ νκ³ λ°©λ¬Έ μ²λ¦¬λ₯Ό νλ€.
- μ€νμ μ΅μλ¨ λ
Έλμ λ°©λ¬Ένμ§ μμ μΈμ λ
Έλκ° μμΌλ©΄ κ·Έ μΈμ λ
Έλλ₯Ό μ€νμ λ£κ³ λ°©λ¬Έ μ²λ¦¬λ₯Ό νλ€.
2-1. λ°©λ¬Ένμ§ μμ μΈμ λ Έλκ° μμΌλ©΄ μ€νμμ μ΅μλ¨ λ Έλλ₯Ό κΊΌλΈλ€. - 2λ² κ³Όμ μ λ μ΄μ μνν μ μμ λκΉμ§ λ°λ³΅νλ€.
> μ€νμΌλ‘ ꡬν μ μ¬λ¬ κ°μ λ Έλλ₯Ό ν λ²μ μ€νμ μλ λ°©λ²
- νμ μμ λ Έλλ₯Ό μ€νμ μ½μ νκ³ , μ¦μ κΊΌλ΄ ν΄λΉ λ Έλλ₯Ό νμ λ Έλμ μ μ₯
- νμ λ
Έλλ₯Ό λ°©λ¬Ένμ§ μμλ€λ©΄ λ°©λ¬Έ μ²λ¦¬νκ³ , λͺ¨λ μΈμ λ
Έλ μ€ λ°©λ¬Ένμ§ μμ μΈμ λ
Έλλ₯Ό λͺ¨λ μ€νμ μΆκ°
* μ€νμ νμ μ μΆ(LIFO, Last In First Out) νΉμ±μ μν΄ DFS νμμ μμμΌλ‘ μ§νλ¨. - 2λ² κ³Όμ μ λ μ΄μ μνν μ μμ λκΉμ§ λ°λ³΅νλ€.
> μ¬κ·λ₯Ό μ΄μ©νμ¬ κ°κ²°νκ² μ½λ ννμ΄ κ°λ₯νλ€.
- μ¬κ·: νλμ ν¨μμμ μκΈ° μμ μ λ€μ νΈμΆνμ¬ μμ μ μννλ μκ³ λ¦¬μ¦
- μνμ κ·λ©λ²: '1λ² λλ―Έλ
Έκ° μ°λ¬μ§λ€', 'kλ² λλ―Έλ
Έκ° μ°λ¬μ§λ©΄ k+1λ² λλ―Έλ
Έλ μ°λ¬μ§λ€'κ° μ°Έμ΄λ©΄, 'λͺ¨λ λλ―Έλ
Έκ° μ°λ¬μ§λ€.'
* μ¬κ· ν¨μκ° μκΈ° μμ μ μ¬λ¬ λ² νΈμΆνκ² λλ©΄, μ¬νΈμΆνλ κ³Όμ μμ μ€λ³΅ μ°μ°μ΄ λ°μνμ¬ μκ°λ³΅μ‘λκ° μ»€μ§λ λ± λΉν¨μ¨μ΄ λ°μν μ μλ€.
# λ°©λ¬Έ μ²λ¦¬λ₯Ό μν 리μ€νΈ μμ± visited = [False] * n # μ¬κ· ν¨μ μμ± def dfs(node): visited[node] = True # λ°©λ¬Έ μ²λ¦¬ for i in graph[node]: # λ Έλν λ΄ μμ(λ Έλ)λ₯Ό λλ©΄μ λ°©λ¬Έ νμΈ if not visited[i]: dfs(i) # λ―Έ λ°©λ¬Έ λ Έλ μ μ¬κ· ν¨μ μν
Reference
- [λ°νΉλ μ μ€μ μκ³ λ¦¬μ¦] 0x0Bκ° - μ¬κ·
- μ΄κ²μ΄ μ·¨μ μ μν μ½λ© ν μ€νΈλ€ with νμ΄μ¬
'πΈ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] 곡곡λ°μ΄ν°ν¬νΈ Open API νμ±, JPA (0) 2024.08.08 [Java] μμ£Ό μ¬μ©λλ Lombok μ΄λ Έν μ΄μ (0) 2024.06.22 [Python] deque μλ£κ΅¬μ‘° (0) 2024.06.08 [VS code] Code Runner μ¬μ© μ ν°λ―Έλμ μ€ν κ²°κ³Ό μΆλ ₯νκΈ° (1) 2024.04.03 [VS code] νμκΈ° ν λ΄ git μ 보 νμ (0) 2024.04.02