Super Kawaii Cute Cat Kaoani
λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Algorithm/Python

[Python] BFS μ•Œκ³ λ¦¬μ¦˜

728x90

πŸ’‘ BFS

  • BFS(Breadth First Search : λ„ˆλΉ„ μš°μ„  탐색) μ•Œκ³ λ¦¬μ¦˜μ€ μ‰½κ²Œ 말해 κ°€κΉŒμš΄ λ…Έλ“œλΆ€ν„° 탐색
  • 큐 자료ꡬ쑰λ₯Ό μ΄μš©ν•˜λŠ” 것이 정석
  • μΈμ ‘ν•œ λ…Έλ“œλ₯Ό 반볡적으둜 큐에 넣도둝 μ•Œκ³ λ¦¬μ¦˜μ„ μž‘μ„±ν•˜λ©΄ μžμ—°μŠ€λŸ½κ²Œ λ¨Όμ € λ“€μ–΄μ˜¨ 것이 λ¨Όμ € λ‚˜κ°€κ²Œ λ˜μ–΄ κ°€κΉŒμš΄ λ…Έλ“œλΆ€ν„° 탐색 μ§„ν–‰

πŸ’‘ λ™μž‘ 방식

  1. 탐색 μ‹œμž‘ λ…Έλ“œλ₯Ό 큐에 μ‚½μž…ν•˜κ³  λ°©λ¬Έ 처리
  2. νμ—μ„œ λ…Έλ“œλ₯Ό κΊΌλ‚΄ ν•΄λ‹Ή λ…Έλ“œμ˜ 인접 λ…Έλ“œ μ€‘μ—μ„œ λ°©λ¬Έν•˜μ§€ μ•Šμ€ λ…Έλ“œλ₯Ό λͺ¨λ‘ 큐에 μ‚½μž…ν•˜κ³  방문처리
  3. 2번의 과정을 더 이상 μˆ˜ν–‰ν•  수 없을 λ•ŒκΉŒμ§€ 반볡

πŸ’‘ 파이썬 μ½”λ“œ

from collections import deque

# BFS μ•Œκ³ λ¦¬μ¦˜ κ΅¬ν˜„
def bfs(graph, start, visited):

    queue = deque([start]) # μ‹œμž‘ λ…Έλ“œ 큐에 λ„£κ³  μ΄ˆκΈ°ν™”
	visited[start] = True # μ‹œμž‘ λ…Έλ“œ λ°©λ¬Έ ν‘œμ‹œ
    
   # 큐가 λΉ„μ–΄μžˆμ§€ μ•Šμ€ λ™μ•ˆ 반볡
	while queue:
        v = queue.popleft() # νμ—μ„œ λ…Έλ“œλ₯Ό ν•˜λ‚˜ κΊΌλ‚΄ v에 ν• λ‹Ή
        print(v, end = ' ')
        
        # ν˜„μž¬ λ…Έλ“œμ™€ μΈμ ‘ν•œ λ…Έλ“œλ“€μ— λŒ€ν•΄ 반볡
        for i in graph[v]:
            if not visited[i]: # ν•΄λ‹Ή λ…Έλ“œκ°€ λ°©λ¬Έλ˜μ§€ μ•Šμ•˜λ‹€λ©΄
                queue.append(i) #  큐에 ν•΄λ‹Ή λ…Έλ“œλ₯Ό μΆ”κ°€
                visited[i] = True # ν•΄λ‹Ή λ…Έλ“œ λ°©λ¬Έ ν‘œμ‹œ
                
# μ‹€μ œ κ·Έλž˜ν”„λ₯Ό 인접 리슀트둜 μ •μ˜
graph = [
    [],
    [2, 3, 8],
    [1, 7],
    [1, 4, 5],
    [3, 5],
    [3, 4],
    [7],
    [2, 6, 8],
    [1, 7]
]

visited = [False] * (len(graph) + 1) # λ°©λ¬Έ μ—¬λΆ€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 리슀트λ₯Ό μ΄ˆκΈ°ν™”
bfs(graph, 1, visited) # BFS ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ μ‹œμž‘ λ…Έλ“œκ°€ 1일 λ•Œμ˜ κ²°κ³Όλ₯Ό 좜λ ₯
728x90