Algo-bfs.md


  • ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” BFS ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋…


๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰

BFS - Breadth First Search bfsimage

์ธ์ ‘ํ•œ ๋…ธ๋“œ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

  • BFS๋Š” ํ(Queue)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค.

ํŠน์ง•

  • ํ-Queue๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค.

  • ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ ์‹ค์ œ ์ˆ˜ํ–‰ ์‹œ๊ฐ„์€ DFS๋ณด๋‹ค ์ข‹์€ ํŽธ์ด๋‹ค.

ํƒ์ƒ‰ ๊ณผ์ •

  1. ํƒ์ƒ‰ ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ํ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.

  2. ํ์—์„œ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ด ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ธ์ ‘ ๋…ธ๋“œ ์ค‘ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ ํ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌํ•œ๋‹ค.

  3. 2๋ฒˆ์˜ ๊ณผ์ •์„ ๋” ์ด์ƒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์„ ๋–„๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

๊ตฌํ˜„

  • Python์—์„œ๋Š” deque๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

from collections import deque
def bfs(graph, start, visited):
    queue = deque([start]) #ํ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ํ์— ์ง‘์–ด๋„ฃ๋Š”๋‹ค.
    visited[start] = True #์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌํ•œ๋‹ค.

    while queue: 
        v = queue.popleft() # ํ์˜ ๊ฐ€์žฅ ์•„๋ž˜์— ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ popํ•œ๋‹ค.
        print(v, end=' ') # ๋…ธ๋“œ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

        for node in graph[v]: #์ถœ๋ ฅํ•œ ๋…ธ๋“œ์— ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋“ค์„ ํ™•์ธํ•œ๋‹ค.
            for not visited[node]: #์ธ์ ‘ํ•œ ๋…ธ๋“œ์˜ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•œ๋‹ค.
                queue.append(node) #๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ํ์— ๋„ฃ๊ณ 
                visited[node] = True #๋ฐฉ๋ฌธ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.

graph = [
    [],
    [2, 3, 8],
    [1, 7],
    [1, 4, 5],
    [3, 5],
    [3, 4],
    [7],
    [2, 6, 8],
    [1, 7]
]
visited = [False] * 9
bfs(graph, 1, visitied) #๊ทธ๋ž˜ํ”„, ์‹œ์ž‘๋…ธ๋“œ, ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌํ•  ๋ฐฐ์—ด

Last updated