βοΈ λ¬Έμ
https://www.acmicpc.net/problem/2644
μ°λ¦¬ λλΌλ κ°μ‘± νΉμ μΉμ²λ€ μ¬μ΄μ κ΄κ³λ₯Ό μ΄μλΌλ λ¨μλ‘ νννλ λ νΉν λ¬Ένλ₯Ό κ°μ§κ³ μλ€. μ΄λ¬ν μ΄μλ λ€μκ³Ό κ°μ λ°©μμΌλ‘ κ³μ°λλ€. κΈ°λ³Έμ μΌλ‘ λΆλͺ¨μ μμ μ¬μ΄λ₯Ό 1μ΄μΌλ‘ μ μνκ³ μ΄λ‘λΆν° μ¬λλ€ κ°μ μ΄μλ₯Ό κ³μ°νλ€. μλ₯Ό λ€λ©΄ λμ μλ²μ§, μλ²μ§μ ν μλ²μ§λ κ°κ° 1μ΄μΌλ‘ λμ ν μλ²μ§λ 2μ΄μ΄ λκ³ , μλ²μ§ νμ λ€κ³Ό ν μλ²μ§λ 1μ΄, λμ μλ²μ§ νμ λ€κ³Όλ 3μ΄μ΄ λλ€.
μ¬λ¬ μ¬λλ€μ λν λΆλͺ¨ μμλ€ κ°μ κ΄κ³κ° μ£Όμ΄μ‘μ λ, μ£Όμ΄μ§ λ μ¬λμ μ΄μλ₯Ό κ³μ°νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
π€ μ μΆλ ₯ μμ
π§ λμ΄λ/μμ μκ°
β λμ΄λ: solved.ac κΈ°μ€ S2
β μμ μκ°: μμ μ νμλ λ¬Έμ λΌ μΈ‘μ X
β κΆμ₯ μκ°: 1μκ°
π‘ νμ΄
1) λ¬Έμ μ ν νμ
'μ΄μ'λΌλ κ°λ μμ²΄κ° κ³μν΄μ νκ³ λ€μ΄κ°λ κ±°λΌ λ³΄μλ§μ DFSλ‘ νμ΄μΌκ² λ€λ μκ°μ νλ€.
νμ§λ§ λ΄ κ²½νμ λ³΄ν΅ DFSλ‘ ν μ μλ λ¬Έμ λ BFSλ‘λ ν μ μκ³ μ¬λ§νλ©΄ κ·Έ λ°λλ κ°λ₯νκΈ° λλ¬Έμ BFSλ‘λ νμ΄λ΄€λ€. μλ ꡬν λΆλΆμ λ μ½λλ₯Ό λͺ¨λ μ 리ν΄λμλ€.
2) μμ΄λμ΄ νλ¦
β DFS κΈ°λ³Έ ν ꡬμ
Step. 1: DFS ν¨μ μΈμ μ μ
β μ΄μ κΈ°λ‘μ© λ³μ μ μΈ?
μ΄κ±΄ νλ Έλ€κΈ°λ³΄λ€ κ΅³μ΄ μ΄λ κ² ν μ΄μ κ° μλ€κ³ μκ°λλ λΆλΆμ΄λ€.
μ²μμλ μ΄μλ₯Ό κΈ°λ‘νκΈ° μν μ μλ³μλ₯Ό λ°λ‘ μ μΈν΄μ€¬λλ° DFS ν¨μμ κ°λ§ μ λ겨μ€λ€λ©΄ μ μλ³μλ₯Ό μ¬μ©νμ§ μκ³ λ λ¬Έμ κ° ν΄κ²°λ κ² κ°μλ€.
β DFS ν¨μμ μ λ ₯ = μμ λ Έλ, μ΄μ μ΄κΈ°κ°
μ μλ³μλ₯Ό μ¬μ©νμ§ μκΈ° μν λ°©λ²μ μ΄μ μ΄κΈ°κ°μ DFS ν¨μμ μΈμλ‘ λ겨주λ κ²μ΄λ€.
νμ¬ λ Έλμ μ°κ²°λ λ Έλλ₯Ό νλμ© νμΈνλ©΄μ λ°©λ¬Ένμ§ μμ λ ΈλμΌ κ²½μ° DFS ν¨μλ₯Ό νΈμΆνκ² λλλ°, μ΄ λ νμ¬ μ΄μ+1μ ν¨κ» λ겨주면 μ¬κ·κ° κΉμ΄μ§λ©΄μ μμ°μ€λ½κ² μ΄μκ° μ¦κ°νκ² λλ€.
Step. 2: μ¬κ· μ’ λ£ μ‘°κ±΄ μ€μ
β νμ¬ λ Έλκ° t2λ©΄ ν¨μ μ’ λ£
μ΄μλ₯Ό κ³μ°ν΄μΌ νλ μλ‘ λ€λ₯Έ λ μ¬λμ λ²νΈλ₯Ό target1, target2λΌλ μλ―Έμμ t1, t2λ‘ μ§μκΈ° λλ¬Έμ 'νμ¬ λ Έλκ° t2λ©΄ ν¨μ μ’ λ£'λΌκ³ μ μλ€.
Step.1μμ DFS ν¨μλ₯Ό μμ λ Έλμ μ΄μ μ΄κΈ°κ°μ μΈμλ‘ λ°λλ€κ³ νλλ° μ΄ λ μμ λ Έλλ‘ t1μ μ¬μ©νλ€. μμ μ λ ₯ 1μ μ΄μ©ν΄ t1μμ t2λ‘ κ°λ κ³Όμ μ μλ νμ κ°λ€.
νμ¬ νμΈ μ€μΈ λ Έλκ° 3μ΄λΌλ©΄ λ νμν νμ μμ΄ ν¨μλ₯Ό μ’ λ£νλ©΄ λλ€.
Step. 3: answer λ¦¬ν΄ κ²°κ³Ό νμΈ
DFS μ½λμμ μ£ΌμμΌλ‘ 'μ΄ λΆλΆ μμΌλ©΄ νλ¦Ό'μ΄λΌκ³ λΌμλ λ μ€μ λ£λ κ² μ μΌ μ΄λ €μ λ€. μ΄ λΆλΆμ μλ λ°©μ μ΄ν΄λ₯Ό μν΄ μλμ²λΌ printλ¬Έμ μΆκ°ν΄ κ²°κ³Όλ₯Ό μ°μ΄λ΄€λ€.
μ΄κ² κΈλ‘ μ μΌλ©΄ μ μ λ¬λ μ§ λͺ¨λ₯΄κ² μ§λ§ μΌλ¨ μ μ΄λ³΄μλ©΄..!
ν¨μλ DFS(7, 0) → DFS(2, 1) → DFS(3, 3) μμλ‘ νΈμΆλκ³ DFS(3, 3)μ t2 == 3μ΄κΈ° λλ¬Έμ νμ¬κΉμ§ κΈ°λ‘λ μ΄μ 3μ 리ν΄νλ€. κ·ΈλΌ DFS(3, 3)μΌλ‘λΆν° 리ν΄λ κ°μ΄ Noneμ΄ μλκΈ° λλ¬Έμ answer κ° λν 3μ΄ λλ€.
κ·Έλ¦¬κ³ μ’ λ£ μ‘°κ±΄μ΄ νΈμΆλ μνλ‘λΆν° λ€μ μ΄μ ν¨μλ‘ λμμ κ³μν΄μ κ°μ 리ν΄ν΄μ£Όλλ° answer κ°μ 3μΌλ‘ λ³νκ° μκ³ Noneλ μλκΈ° λλ¬Έμ κ³μ 3μ΄ λ¦¬ν΄λμ΄ μ΅μ’ κ°μ΄ λλ€. → μ΄ λΆλΆ λκ° μ€λͺ μ΄ μ΄μν΄μ νΉμλ μ΄ κΈμ λ³΄κ³ κ³μ λΆμ΄ μλ€λ©΄ μΌλ¨ ν¨μ€ν΄μ£ΌμκΈ°λ₯Ό,,β
β‘ BFS κΈ°λ³Έ ν ꡬμ
BFSλ μΌλ°μ μΌλ‘ μ¬μ©νλ κ·Έ ꡬ쑰λλ‘ κ΅¬νν΄μ£Όλ©΄ λλ€. μ΄ λ¬Έμ μμ μ κ²½ μΌλ λΆλΆμ νμ¬ λ Έλμ μ΄μλ₯Ό νλμ ννλ‘ λ¬Άμ΄ νμ κ°μ΄ λ£μ΄μ€ κ²μ΄λ€.
3-1) ꡬν: DFS
N = int(input())
t1, t2 = map(int, input().split())
M = int(input())
family = {k: [] for k in range(1, N+1)}
visited = [False]*(N+1)
for _ in range(M):
x, y = map(int, input().split()) # xλ yμ λΆλͺ¨
family[x].append(y)
family[y].append(x)
def DFS(node, score):
visited[node] = True
if node == t2:
return score
for child in family[node]:
if not visited[child]:
answer = DFS(child, score+1)
# μ΄ λΆλΆ μμΌλ©΄ νλ¦Ό
if answer is not None:
return answer
answer = DFS(t1, 0)
if answer is None:
print(-1)
else:
print(answer)
3-2) ꡬν: BFS
N = int(input())
t1, t2 = map(int, input().split())
M = int(input())
family = {k: [] for k in range(1, N+1)}
visited = [False]*(N+1)
for _ in range(M):
x, y = map(int, input().split()) # xλ yμ λΆλͺ¨
family[x].append(y)
family[y].append(x)
def BFS(node, depth):
from collections import deque
queue = deque([(node, depth)])
visited[node] = True
while queue:
current_node, current_depth = queue.popleft()
if current_node == t2:
return current_depth
for member in family[current_node]:
if not visited[member]:
visited[member] = True
queue.append((member, current_depth+1))
return None
answer = BFS(t1, 0)
print(answer)
μμ μ λ€λ₯Έ λ¬Έμ νμ΄μμ 'BFSκ° DFSλ³΄λ€ λΉ λ₯΄λ€κ³ νμ§λ§ λλ μμ§κΉμ§ BFSκ° λ λΉ¨λλ λ¬Έμ λ₯Ό λ³Έ μ μ΄ μλ€'κ³ μ΄ μ μ΄ μλ€.
μ΄ λ¬Έμ μμλ DFSμ μ€ν μκ°μ 32ms, BFSμ μ€ν μκ°μ 52msλ‘ DFSκ° λ λΉ λ₯Έ κ²μ νμΈν μ μμλ€. μ΄μ κ° λμ§?
4) μ΄λ €μ λ μ /λ°°μ΄ μ
π¨ μ΄λ €μ λ μ
- DFSλ μ¬κ·λ₯Ό μ°μ§λ§ λ΄κ° λ¬Έμ λ₯Ό ν λ μ¬κ· κ°λ μ μλ²½νκ² μ΄ν΄νλ€κΈ°λ³΄λ€ μ½λλ₯Ό νλμ ν νλ¦Ώμ²λΌ μΈμλκ³ μ¬μ©ν΄μ κ·Έλ°κ° μ΄λ μμ μμ κ²°κ³Ό κ°μ return ν΄μΌ νλμ§ μ νλ κ² νμ μ΄λ ΅λ€.
- μ΄ λΆλΆμ μ¬κ· 곡λΆλ₯Ό μΆκ°μ μΌλ‘ ν΄μΌλ§ ν΄κ²°λ κ²μ΄κΈ° λλ¬Έμ μκ° λ΄μ μ¬κ·μ λν΄ λ€μ λ΄μΌκ² λ€.
β λ°°μ΄ μ
- DFS λ¬Έμ λ₯Ό μμΉκΈ° νλ κ²λ μ’μ§λ§ λ κ·Έ μ μ μ¬κ· κ°λ μ μλ²½νκ² μ΄ν΄νλ κ²μ΄ λ μ’μ κ² κ°λ€ ^^..
'Problem Solving > [νν΄99] TIL' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
99ν΄λ½ μ½ν μ€ν°λ 10μΌμ°¨ TIL / BFS(λλΉ μ°μ νμ) (2) | 2024.11.06 |
---|---|
99ν΄λ½ μ½ν μ€ν°λ 9μΌμ°¨ TIL / BFS(λλΉ μ°μ νμ) (0) | 2024.11.06 |
99ν΄λ½ μ½ν μ€ν°λ 7μΌμ°¨ TIL / μμ νμ (0) | 2024.11.03 |
99ν΄λ½ μ½ν μ€ν°λ 6μΌμ°¨ TIL / μ΄λΆ νμ (0) | 2024.11.03 |
99ν΄λ½ μ½ν μ€ν°λ 5μΌμ°¨ TIL / BFS(λλΉ μ°μ νμ) (0) | 2024.11.02 |