π’ 6. Graphs
𫧠그λν
- μ μ (V, vertex)κ³Ό μ μ λ€μ μ°κ²°νλΒ κ°μ (E, edge)Β μΌλ‘ μ΄λ£¨μ΄μ§ μλ£κ΅¬μ‘°μ΄λ€.
- μ°κ²°λμ΄ μλ κ°μ²΄κ°μ κ΄κ³λ₯Ό ννν μ μλ μλ£κ΅¬μ‘°μ΄λ€.
- κ·Έλνλ μ¬λ¬κ°μ κ³ λ¦½λ λΆλΆ κ·Έλνλ‘ κ΅¬μ±λ μ μλ€.
- κ·ΈλνλΒ
G = (V,E)
Β λ‘ νννλ€.(V
λ κ·ΈλνμμΒ μ μ μ μ§ν©μ λνλ΄κ³ ΒE
λΒ κ°μ μ μ§ν©μ λ§νλ€.) - κ·Έλνλ λ€νΈμν¬ λͺ¨λΈμ΄λ€.
- 2κ° μ΄μμ κ²½λ‘κ° κ°λ₯νλ€.
- μ¦, μ μ (λ Έλ)λ€ μ¬μ΄μ 무방ν₯/λ°©ν₯μμ μλ°©ν₯ κ²½λ‘λ₯Ό κ°μ§μκ° μλ€.
- self-loopλΏλ§ μλλΌ loop/circuit λͺ¨λ κ°λ₯νλ€.
- λ£¨νΈ λ ΈλλΌλ κ°λ μ΄ μλ€.
- λΆλͺ¨-μμκ΄κ³λΌλ κ°λ μ΄ μλ€.
- κ·Έλνλ ν¬κ² λ°©ν₯ κ·Έλνμ 무방ν₯ κ·Έλνκ° μλ€.
- κ°μ μ μ 무λ κ·Έλνμ λ°λΌ λ€λ₯΄λ€.
- κ·Έλνλ μν νΉμ λΉμνμ΄λ€.
β€οΈ 1. 무방ν₯ κ·Έλν
무방ν₯ κ·ΈλνλΒ λ μ μ μ μ°κ²°νλ κ°μ μ λ°©ν₯μ΄ μλ κ·ΈλνΒ μ΄λ©°, μ λ°©ν₯μΌλ‘ μ΄λμ΄ κ°λ₯νλ€.
μλ κ·Έλ¦Όκ³Ό κ°μ 무방ν₯ κ·Έλνμμ μ μ Β A
μΒ B
λ₯Ό λνλΌ λΒ (A,B)
Β λλΒ (B,A)
Β λ‘ νννλ€. λ ννμ λμΌν μλ―Έμ΄λ€.
β€οΈ 2. λ°©ν₯ κ·Έλν
λ μ μ μ μ°κ²°νλ κ°μ μ λ°©ν₯μ΄ μ‘΄μ¬νλ κ·Έλνμ΄λ©°, κ°μ μ λ°©ν₯μΌλ‘λ§ μ΄λν μ μλ€.
μλ κ·Έλ¦Όκ°μ κ²½μ°Β A -> C
Β λ°©ν₯μΌλ‘λ§ μ΄λμ΄ κ°λ₯νλ€. μ΄λ° κ·ΈλνλΒ <A,C>
Β λ‘ νννλλ°Β <C,A>
Β λ‘ νννλ©΄Β C -> A
Β λ°©ν₯μΌλ‘λ§ μ΄λκ°λ₯νλ€λ κ²μΌλ‘ μλ―Έκ° λ¬λΌμ§λ€.
𫧠μΈμ 리μ€νΈ
κ·Έλνμ λ Έλλ€μ 리μ€νΈλ‘ νννκ²μ΄λ€.
μ£Όλ‘ μ μ μ 리μ€νΈ λ°°μ΄μ λ§λ€μ΄ κ΄κ³λ₯Ό μ€μ νμ¬ κ΅¬ννλ€.
- λͺ¨λ μ μ μ μΈμ 리μ€νΈμ μ μ₯νκ³ κ° μ μ (λ Έλ)μ μΈμ ν μ μ λ€μ 리μ€νΈλ‘ λ§λλ λ°©λ²μ΄λ€.
- 곡κ°μ κ°μ μ κ°μλ§νΌ νμνλ€.
- μ μ κ³Ό μ°κ²°λ κ°μ μ κ°μλ§νΌ 리μ€νΈμμλ€μ΄ μ μ₯λκΈ° λλ¬Έμ΄λ€. μ κ·Έλ¦Όμμ μ΄ν΄λ³΄λ©΄ μ μ
1
κ³Ό μ μ Β2
μΒ5
λ₯Ό μ°κ²°νλ κ°μ μ κ°μλ§νΌ μμκ° μ μ₯λμ΄ μλκ±Έ νμΈν μ μλ€.
- μ μ κ³Ό μ°κ²°λ κ°μ μ κ°μλ§νΌ 리μ€νΈμμλ€μ΄ μ μ₯λκΈ° λλ¬Έμ΄λ€. μ κ·Έλ¦Όμμ μ΄ν΄λ³΄λ©΄ μ μ
𫧠μΈμ νλ ¬
N x N νλ ¬λ‘μ¨ matrix[i][j] = 1μ΄λ©΄ μ μ iμμ jλ‘ κ°λ κ°μ μ΄ μ‘΄μ¬νκ³ matrix[i][j] = 0μ΄λ©΄ μ μ iμμ jλ‘ κ°λ κ°μ μ΄ μ‘΄μ¬νμ§ μλλ€λ μλ―Έμ΄λ€.
λ¨, κ°μ€μΉ κ·Έλνμ κ²½μ° matrix[i][j] > 0μ΄λ©΄ iμμ jλ‘ κ°λ κ°μ μ΄ μ‘΄μ¬νλ€κ³ λ³Ό μ μλ€.
- μΈμ νλ ¬μΒ
boolean
Β νμ μ νλ ¬ λλΒ0
κ³ΌΒ1
λ‘ κ΅¬μ±λ μ μ νμ μ νλ ¬μ μ¬μ©ν μ μλ€. - μ μ μ κ°μκ°Β
N
μΈ κ·Έλνλ₯Ό μΈμ νλ ¬λ‘ ννμ κ°μ μ μμ 무κ΄νκ²Βn^2
κ°μ λ©λͺ¨λ¦¬ 곡κ°μ΄ νμνλ€. - 무방ν₯ κ·Έλνλ₯Ό μΈμ νλ ¬λ‘ νννλ€λ©΄ μ΄ νλ ¬μ λμΉ νλ ¬μ΄ λλ€. λ¬Όλ‘ λ°©ν₯κ·Έλνλ λμΉνλ ¬μ΄ λμ§ μμμλ μλ€.
- μΈμ 리μ€νΈλ₯Ό μ¬μ©ν κ·Έλν μκ³ λ¦¬μ¦(Ex. λλΉ μ°μ νμ) λν μΈμ νλ ¬μμ μ¬μ©μ΄ κ°λ₯νλ€. νμ§λ§, μΈμ νλ ¬μ ν¨μ¨μ±μ΄ λ¨μ΄μ§λ€.
- μΈμ 리μ€νΈλ μ΄λ€ λ Έλμ μΈμ ν λ Έλλ€μ μ½κ² μ°Ύμ μ μμ§λ§ μΈμ νλ ¬μμλ μΈμ ν λ Έλλ₯Ό μ°ΎκΈ° μν΄ λͺ¨λ λ Έλλ₯Ό μ λΆ μνν΄μΌ νλ€
𫧠그λν νμ
β€οΈ 1. κΉμ΄ μ°μ νμ(DFS, Depth-First Search)
λ£¨νΈ λ Έλ(νΉμ λ€λ₯Έ μμμ λ Έλ)μμ μμν΄ λ€μ λΆκΈ°λ‘ λμ΄κ°κΈ°μ μ ν΄λΉ λΆκΈ°λ₯Ό μλ²½νκ² νμνλ λ°©λ²μ΄λ€.
- λκ² νμνκΈ° μ μ κΉκ² νμνλ λ°©λ²μ΄λ€.
- λͺ¨λ λ
Έλλ€μ νμν΄μΌνλ κ²½μ°μ μ΄ λ°©λ²μ μ¬μ©νλκ²μ΄ μ’λ€.
- λλΉ μ°μ νμμ λΉν΄ μλμ μΌλ‘ κ°λ¨νλ€.
β€οΈ 2. λ°©ν₯ κ·Έλν
λ£¨νΈ λ Έλ(νΉμ λ€λ₯Έ μμμ λ Έλ)μμ μμν΄ μΈμ ν λ Έλλ₯Ό λ¨Όμ νμνλ λ°©λ²
- κΉκ² νμνκΈ° μ μ λκ² νμνλ νμλ°©λ²
- λ λ Έλμ¬μ΄μ μ΅λ¨κ²½λ‘ νΉμ μμμ κ²½λ‘λ₯Ό μ°Ύκ³ μΆμλ μ¬μ©νλ€