μλ£κ΅¬μ‘°/πμκ³ λ¦¬μ¦ - 18
μ€λ λ€μ κ°μ λͺ©λ‘
- bfs - 2
- bfs - 3
bfs ꡬνλ°©λ²?
bfsλ λλΆλΆ FIFOνΉμ±μ κ°μ§ νλ₯Ό μ΄μ©ν΄μ λ§μ΄ ꡬννλ€.
(λλ μ¬κ·ν¨μ)
νλ λ€μ νμμ§μ μ μ μ₯νκΈ° μν΄ μ¬μ©λλ€.
μ΄ κ·Έλ¦Όμ μλ‘ λ€μ΄λ³΄λ©΄,
Aμμ νμμ μμν κ²μ΄κΈ°μ νμ Aμ½μ νκ³ μμνκ² λ€. ν : A
νμμ νμ ν΅ν΄ μ»μ λ Έλ Aμ μΈμ λ Έλλ€μ νμ λ£μΌλ©΄, ν : B, C
νμμ νμ ν΅ν΄ μ»μ λ Έλ Bμ μΈμ λ Έλλ€μ νμ λ£μΌλ©΄, ν : C, D
νμμ νμ ν΅ν΄ μ»μ λ Έλ Cμ μΈμ λ Έλλ€μ νμ λ£μΌλ©΄, ν : D, G, H, I
νμμ νμ ν΅ν΄ μ»μ λ Έλ Dμ μΈμ λ Έλλ€μ νμ λ£μΌλ©΄, ν : H, I, E, F
νμμ νμ ν΅ν΄ μ»μ λ Έλ Gμ μΈμ λ Έλλ€μ νμ λ£μΌλ©΄, ν : I, E, F
νμμ νμ ν΅ν΄ μ»μ λ Έλ Hμ μΈμ λ Έλλ€μ νμ λ£μΌλ©΄, ν : E, F, J
νμμ νμ ν΅ν΄ μ»μ λ Έλ Iμ μΈμ λ Έλλ€μ νμ λ£μΌλ©΄, ν : F, J
νμμ νμ ν΅ν΄ μ»μ λ Έλ Eμ μΈμ λ Έλλ€μ νμ λ£μΌλ©΄, ν : J
νμμ νμ ν΅ν΄ μ»μ λ Έλ Fμ μΈμ λ Έλλ€μ νμ λ£μΌλ©΄, ν :
νκ° λΉμμΌλ―λ‘ μ’ λ£.
Bμμ μΈμ λ
Έλλ₯Ό νμ λ£μλ, Aλ₯Ό μλ΅νκ³ , Cμμλ λ§μ°¬κ°μ§μλ€.
μ¬κΈ°μ λλ μκ°μ βμ μΈμ λ
Έλμ§λ§ νμ λ£μ§ μμμκΉ?β
μ΄μ λν λ΅μ μ΄λ―Έ λ°©λ¬Έν λ
Έλμ΄κΈ° λλ¬Έμ λ€μ λ°©λ¬Έν νμκ° μκ³ ,
νλ² λ°©λ¬Έν λ
Έλμ μΈμ λ
Έλλ€μ μμ§ λ°©λ¬Ένμ§ μμλλΌλ, νμ μΆκ°λμ΄ μκΈ° λλ¬Έμ
μμΌλ‘ λ°©λ¬Ένμ¬ ν΄λΉ λ
Έλμ μΈμ λ
Έλλ€μ νμ ν κ²μ΄κΈ° λλ¬Έμ΄λ€.
κ·Έλ λ€λ©΄ bfsλ₯Ό ꡬννκΈ° μν΄μλ
κ·Έλνꡬ쑰, νμν λ
Έλλ₯Ό μ μ₯νλ ν, λ°©λ¬Ένλμ§ μ¬λΆλ₯Ό μ μ₯νλ 곡κ°
μ΄λ κ² μΈκ°μ§κ° νμνλ€.
κ°μμμλ λ°©λ¬Έμ¬λΆλ₯Ό νλ‘ μ μ₯νμ§λ§, κ·Έλνμ κ° λ Έλλ₯Ό ν€λ‘ νκ³ True/Falseλ₯Ό valueλ‘ νλ λμ λ리λ₯Ό ν΅ν΄μ λ°©λ¬Έμ¬λΆλ₯Ό νννκΈ°λ‘ νλ€.
bfs ꡬν (queue)
import queue
graph = {}
graph['A'] = ['B', 'C']
graph['B'] = ['A', 'D']
graph['C'] = ['A', 'G', 'H', 'I']
graph['D'] = ['B', 'E', 'F']
graph['E'] = ['D']
graph['F'] = ['D']
graph['G'] = ['C']
graph['H'] = ['C']
graph['I'] = ['C', 'J']
graph['J'] = ['I']
def BFS(graph, start):
visited = {node : False for node in graph}
q = queue.Queue()
q.put(start)
visited[start] = True
while not q.empty():
cur_node = q.get()
pq = copy.copy(q)
print(cur_node, end=" ")
for node in graph[cur_node]:
if not visited[node]:
visited[node] = True
q.put(node)
BFS(graph, 'A')
- νμ μμλ Έλλ₯Ό μΆκ°νλ€
- νμμ κΊΌλ΄κ³ μ΄λ₯Ό νμ¬λ ΈλλΌκ³ νλ€
- νμ¬ λ Έλμ μΈμ λ Έλλ€ μ€ λ°©λ¬Ένμ§ μμ λ Έλλ₯Ό νμ μΆκ°νλ€
- νκ° λΉμ΄μμ λκΉμ§ 2~3μ λ°λ³΅νλ€.
κ²°κ³Όλ μ μΆλ ₯λλ€.
bfs ν λ΄μ© μΆλ ₯ ꡬν (list)
def BFS(graph, start):
visited = {node : False for node in graph}
q = [start]
visited[start] = True
while q:
cur_node = q.pop(0)
print(cur_node)
for node in graph[cur_node]:
if not visited[node]:
visited[node] = True
q.append(node)
print("next : ", end="")
for e in q:
print(e, end=" ")
print()
ꡬ쑰λ₯Ό queue.Queueλ₯Ό μ°λ λ°λμ κΉμ볡μ¬κ° μλμ
νλ₯Ό 볡μ¬ν΄μ μ¬μ©νλ©΄ μλ³Έ νκ° λ°λλ λ°λμ
μλ μλ μ½λμ listλ₯Ό μ΄μ©ν ν ꡬνμΌλ‘ λ³κ²½νλ€.
λ°λΌμ ν λ΄μ©μ μΆλ ₯ν μ μκ² λμλ€.
μμ bfsμ κ³Όμ μ μ€λͺ
νλ©΄μ λνλΈ ν λΆλΆκ³Ό
μλ μ¬μ§μμ nextλ‘ νμλ νμ λ΄μ© λΉκ΅νλ©΄ λκ°λ€.
λ§μ§λ§
μμ΄ ν¬λ‘¬μ κ³ μ ν΄λκ³ λ§€μΌ ν¬λ‘¬ ν¬λλ§λ€ 보λλ°
μ€κ°μ λ‘κ·ΈμΈ νλ¦°μ§λ λͺ¨λ₯΄κ³ κ°μ κ³μλ£λ€κ° λμ€μ νλ¦°κ±° μκ³ λ€μλ£λλ° ννμ°γ
γ
γ
γ
λλΆμ ν κ°μλ₯Ό 3λ²μ© λ³Έλ€γ
γ
γ
γ
γ
γ
γ
λκΈλ¨κΈ°κΈ°