κ·Έλν νμ(Graph Search)
κ·Έλν νμμ΄λ νλμ μ μ μΌλ‘λΆν° μμνμ¬ μ°¨λ‘λλ‘ λͺ¨λ μ μ λ€μ νλ²μ© λ°©λ¬Ένλ κ²μ λ§νλ€. λ¨μν κ·Έλνμ λ Έλλ₯Ό νμνλ κ²μΌλ‘ λ¬Έμ λ₯Ό ν΄κ²°νλ€. κ·Έλν νμμλ BFS/DFSκ° μλ€.
β BFS(Breadth First Search) μ μ
λλΉ μ°μ νμμ΄λΌλ λ»μ΄κ³ , μ½κ² λ§ν΄ κ°κΉμ΄ λ ΈλλΆν° νμνλ μκ³ λ¦¬μ¦μ΄λ€. μλμ κ·Έλ¦Όμ 보면μ μ½κ² μ΄ν΄ν΄λ³΄μ.

μμ κ·Έλ¦Όκ³Ό κ°μ΄ 6κ°μ λ Έλμ 5κ°μ κ°μ (λ Έλμ κ°μ-1)μ΄ μλ€. λ Έλ 1λ²λΆν° μμν΄μ 2λ²μ νμνκ³ λ€μμΌλ‘ 4λ² λ Έλλ₯Ό νμνλ κ² μλ 3λ² λ¨Όμ νμνλ κ²μ΄λ€. 3λ² μμ μ무κ²λ μμΌλ―λ‘ λ€μ 2λ² λ Έλλ‘ λμμμ 2λ² λ Έλμ νμ λ Έλ μ€ νλμΈ 4λ²μ νμνλ€. 4λ²μ λλμΌλ©΄ λ€μ 5λ², λ§μ§λ§μΌλ‘ 6λ² λ Έλλ₯Ό νμμ λμΌλ‘ νΈλ¦¬λ₯Ό λͺ¨λ νμν κ²μ 보μ¬μ€λ€.
μ°μΈ‘ κ·Έλ¦Όμ NxN 그리λμΌ κ²½μ°λ 보μ. 4x4 그리λμΌ κ²½μ°λ λ§μ°¬κ°μ§λ‘ 1λ²λΆν° μμν΄μ μ€λ₯Έμͺ½μΌλ‘ νμμ νλ€. 4λ² μΉΈμ νμμ΄ λλ¬μΌλ©΄ 5λ²λΆν° λ€μ μ€λ₯Έμͺ½μΌλ‘ νμνλ€. μ κ³Όμ μ κ³μ λ°λ³΅νλ©΄ 16λ²κΉμ§ νμμ λμΌλ‘ λͺ¨λ μΉΈμ νμμ΄ λμ΄ λλ€.
Queue(ν)λ₯Ό μ΄μ©
BFSλ νλ₯Ό μ΄μ©ν΄μ λ¬Έμ λ₯Ό νΌλ€. κ°λ¨ν νμ λν΄ μμ보μ.
Queue(ν) μλ£κ΅¬μ‘°λ?
FIFO(First In First Out) ꡬ쑰μ΄κ³ , λ¨Όμ λ€μ΄μ¨ λ°μ΄ν°κ° νμ λ¨Όμ λ€μ΄κ°κ³ , νμμ λμ¬ λλ λ¨Όμ λ€μ΄μ¨ λ°μ΄ν°κ° λΉ μ§λ κ²μ λ§νλ€. μλ κ·Έλ¦Όμ 보면, νμ 0λ² λ Έλκ° λ¨Όμ λ€μ΄μ μμΌλ νμμ λκ° λλ 0λ²μ΄ λ¨Όμ λκ°μΌ νλ κ²μ΄λ€.

λ€μ μμλ₯Ό λ³΄κ³ νλ₯Ό μ΄μ©ν΄ BFSμ λμ λ°©μμ μ΄ν΄λ³΄μ.

μμ κ°μ κ·Έλνμ νκ° μ£Όμ΄μ‘λ€κ³ νμ. μΈμ ν λ Έλκ° μ¬λ¬ κ° μμ λ, μ«μκ° μμ λ ΈλλΆν° λ¨Όμ νμ μ½μ νλ€κ³ κ°μ νλ€. (νμμ κΊΌλ΄ μ²λ¦¬νλ λ Έλλ νλμμΌλ‘, λ°©λ¬Έ μ²λ¦¬λ λ Έλλ νμμΌλ‘ νμ)
β μμ λ Έλλ₯Ό 0μΌλ‘ μ νλ€. 0μ νμ μ½μ νκ³ λ°©λ¬Έ μ²λ¦¬νλ€.

β‘ νμμ 0μ κΊΌλ΄κ³ 0κ³Ό μΈμ ν 1μ νμ μ½μ νλ€. νμ μ½μ λ 1μ λ°©λ¬Έ μ²λ¦¬νλ€.

β’ 1μ νμμ κΊΌλ΄κ³ 1κ³Ό μΈμ ν 2, 3μ νμ λͺ¨λ μ½μ νλ€. 2μ 3μ λ°©λ¬Έ μ²λ¦¬νλ€.

β£ 2λ₯Ό νμμ κΊΌλ΄κ³ , 2μ μΈμ ν 4λ² λ Έλλ₯Ό νμ μ½μ νκ³ λ°©λ¬Έ μ²λ¦¬νλ€.

β€ 3μ νμμ κΊΌλ΄κ³ , 3κ³Ό μΈμ ν 5λ² λ Έλλ₯Ό νμ μ½μ νκ³ λ°©λ¬Έ μ²λ¦¬νλ€.

μ΄λ°μμΌλ‘ κ³μ λ°λ³΅νλ©΄ μΆλ ₯ κ²°κ³Όλ βΏβΆβ·βΈβΉβΊβ»βΌβ½
μΈμ λ Έλλ₯Ό λͺ¨λ νμ λ£κ³ λ¨Όμ λ€μ΄κ° κ²λΆν° κΊΌλΈλ€. κΊΌλμΌλ©΄ κΊΌλΈ λ Έλμ μΈμ ν λ Έλκ° μμΌλ©΄ λͺ¨λ νμ λ£κ³ λ°λ³΅νλ€.
β DFS(Depth First Search) μ μ
κΉμ΄ μ°μ νμμ΄λΌλ λ»μ΄κ³ , κ·Έλνμμ κΉμ λΆλΆμ μ°μ μ μΌλ‘ νμνλ μκ³ λ¦¬μ¦μ΄λ€. μλμ κ·Έλ¦Όμ 보면μ μ½κ² μ΄ν΄ν΄λ³΄μ.

λ Έλ 1λ²λΆν° μμν΄μ 2λ²μ νμνκ³ λ€μμΌλ‘ 2λ² νμ λ Έλ μ€ 3λ²κ³Ό 4λ² λ Έλλ₯Ό νμνλ€. 3λ² νμλ Έλλ μμΌλ―λ‘, 2λ² νμ λ ΈλμΈ 4λ² λ Έλλ₯Ό νμνλ€. 4λ² νμλ Έλλ μμΌλ―λ‘, 1λ²λ Έλλ‘ λμμ νμνμ§ μμ 5λ² λ Έλλ₯Ό λ§μ νμνλ€. 5λ² λ Έλλ₯Ό νμνκ³ , λ§μ§λ§μΌλ‘ νμλ ΈλμΈ 6λ² λ Έλλ₯Ό νμμ λμΌλ‘ νΈλ¦¬λ₯Ό λͺ¨λ νμν κ²μ 보μ¬μ€λ€.
μ°μΈ‘ κ·Έλ¦Όμ NxN 그리λμΌ κ²½μ°λ 보μ. 4x4 그리λμΌ κ²½μ°λ λ§μ°¬κ°μ§λ‘ 1λ²λΆν° μμν΄μ μλμͺ½μΌλ‘ νμμ νλ€. BFS λμλ μ€λ₯Έμͺ½μΌλ‘ νμμ νμ§λ§ DFSλ μλμͺ½μΌλ‘ νμμ νλ€. 13λ² μΉΈμ νμμ΄ λλ¬μΌλ©΄ 2λ²λΆν° λ€μ μλμͺ½μΌλ‘ νμνλ€. μ κ³Όμ μ κ³μ λ°λ³΅νλ©΄ 16λ²κΉμ§ νμμ λμΌλ‘ λͺ¨λ μΉΈμ νμμ΄ λμ΄ λλ€.
Stack(μ€ν)μ μ΄μ©
DFSλ νλ₯Ό μ΄μ©ν΄μ λ¬Έμ λ₯Ό νΌλ€. κ°λ¨ν μ€νμ λν΄ μμ보μ.
Stack(μ€ν) μλ£κ΅¬μ‘°λ?
FILO(First In Last Out) ꡬ쑰μ΄κ³ , λ¨Όμ λ€μ΄μ¨ λ°μ΄ν°κ° μ€νμ λ¨Όμ λ€μ΄κ°κ³ , μ€νμμ λμ¬ λλ λμ€μ λ€μ΄μ¨ λ°μ΄ν°κ° λ¨Όμ λΉ μ§λ κ²μ λ§νλ€. μλ κ·Έλ¦Όμ 보면, μ€νμ 0λ² λ Έλκ° λ¨Όμ λ€μ΄μ μμΌλ μ€νμμ λκ° λλ 1λ²μ΄ λ¨Όμ λκ°μΌ νλ κ²μ΄λ€. μ€νμ μΆμ κ΅¬κ° λμΌνλ―λ‘, νμͺ½μ λ§νμλ€κ³ μκ°νλ©΄ λλ€.

λ€μ μμλ₯Ό λ³΄κ³ μ€ν μ΄μ©ν΄ BFSμ λμ λ°©μμ μ΄ν΄λ³΄μ.

μμ κ°μ κ·Έλνμ μ€νμ΄ μ£Όμ΄μ‘λ€κ³ νμ. μΈμ ν λ Έλκ° μ¬λ¬ κ° μμ λ, μ«μκ° μμ λ ΈλλΆν° λ¨Όμ μ€νμ μ½μ νλ€κ³ κ°μ νλ€. (μ€νμμ κΊΌλ΄ μ²λ¦¬νλ λ Έλλ νλμμΌλ‘, λ°©λ¬Έ μ²λ¦¬λ λ Έλλ νμμΌλ‘ νμ)
β μμ λ Έλλ₯Ό 0μΌλ‘ μ νλ€. 0μ μ€μ μ½μ νκ³ λ°©λ¬Έ μ²λ¦¬νλ€.

β‘ νμ¬ μ€νμ μ΅μλ¨ λ ΈλμΈ 0μ λ°©λ¬Ένμ§ μμ μΈμ λ ΈλμΈ 1μ΄ μμΌλ―λ‘ 1μ μ€νμ μ½μ νλ€. μ€νμ μ½μ λ 1μ λ°©λ¬Έ μ²λ¦¬νλ€.

β’ νμ¬ μ€νμ μ΅μλ¨ λ ΈλμΈ 1μλ λ°©λ¬Ένμ§ μμ μΈμ λ Έλ 2, 3μ΄ μλ€. μ΄ μ€ κ°μ₯ μμ λ ΈλμΈ 2λ₯Ό μ€νμ λ£κ³ λ°©λ¬Έ μ²λ¦¬νλ€.

β£ νμ¬ μ€νμ μ΅μλ¨ λ ΈλμΈ 2μλ λ°©λ¬Ένμ§ μμ 3κ³Ό 4κ° μλ€. μ΄ μ€ κ°μ₯ μμ λ ΈλμΈ 3μ μ€νμ λ£κ³ λ°©λ¬Έ μ²λ¦¬νλ€.

β€ νμ¬ μ€νμ μ΅μλ¨ λ ΈλμΈ 3μλ λ°©λ¬Ένμ§ μμ 4μ 5κ° μλ€. κ·Έ μ€ κ°μ₯ μμ λ ΈλμΈ 4λ₯Ό μ€νμ λ£κ³ λ°©λ¬Έ μ²λ¦¬νλ€.

β₯ νμ¬ μ€νμ μ΅μλ¨ λ ΈλμΈ 4μλ λ°©λ¬Ένμ§ μμ μΈμ λ Έλκ° μλ€. λ°λΌμ μ€νμμ 4λ² λ Έλλ₯Ό κΊΌλΈλ€.

β¦ νμ¬ μ€νμ μ΅μλ¨ λ ΈλμΈ 3μλ λ°©λ¬Ένμ§ μμ μΈμ λ Έλ 5κ° μλ€. 5λ₯Ό μ€νμ λ£κ³ λ°©λ¬Έ μ²λ¦¬νλ€.

μ΄λ°μμΌλ‘ κ³μ λ°λ³΅νλ©΄ μΆλ ₯ κ²°κ³Όλ βΉβ½β»βΌβΊβΈβ·βΆβΏ.
BFSμμλ μΈμ λ Έλλ₯Ό λͺ¨λ νμ λ£μμ§λ§, DFSμμλ μΈμ λ Έλ μ€ κ°μ₯ μμ λ Έλ νλλ§ λ£λλ€. κ·Έλ¦¬κ³ λΉΌλ΄λ©΄μ μΈμ λ Έλλ₯Ό νμνλ κ²μ΄ μλλΌ, μ€νμ λ€μ΄μλ μ΅μλ¨ λ Έλμ μΈμ λ Έλκ° λ μ΄μ μμ λ λΉΌλΈλ€.
λ¬Έμ νμ΄
1260λ²: DFSμ BFS
첫째 μ€μ μ μ μ κ°μ N(1 ≤ N ≤ 1,000), κ°μ μ κ°μ M(1 ≤ M ≤ 10,000), νμμ μμν μ μ μ λ²νΈ Vκ° μ£Όμ΄μ§λ€. λ€μ Mκ°μ μ€μλ κ°μ μ΄ μ°κ²°νλ λ μ μ μ λ²νΈκ° μ£Όμ΄μ§λ€. μ΄λ€ λ μ μ μ¬
www.acmicpc.net
'π§© Algorithm > κ°λ λ° μλ£κ΅¬μ‘°' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [μκ³ λ¦¬μ¦] DP (Dynamic Programming, λμ κ³νλ²) (0) | 2023.09.25 |
|---|---|
| [μκ³ λ¦¬μ¦] μλΌν μ€ν λ€μ€μ 체 (1) | 2023.09.23 |
| Greedy (그리λ μκ³ λ¦¬μ¦) (0) | 2023.05.07 |
| λμ ν©(Prefix Sum, λΆλΆ ν©) (0) | 2023.03.27 |
| Brute Force (μμ νμ μκ³ λ¦¬μ¦) (0) | 2022.08.05 |