๐Ÿ“–Graph

๐Ÿ“–BFS(Breadth-First Search)

์‹œ์ž‘ ๋…ธ๋“œ์— ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๋Š” ๊ทธ๋ž˜ํ”„ ์ˆœํšŒ ๋ฐฉ๋ฒ•

๐Ÿ“–ํŠน์ง•

  • ์ง๊ด€์ ์ด์ง€ ์•Š์Œ
  • ์‹œ์ž‘ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•ด์„œ ๊ฑฐ๋ฆฌ์— ๋”ฐ๋ผ ๋‹จ๊ณ„๋ณ„๋กœ ํƒ์ƒ‰
  • ์žฌ๊ท€์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์Œ
  • ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๋“ค์„ ์ฐจ๋ก€๋กœ ์ €์žฅํ•œ ํ›„ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ์ธ Queue๋ฅผ ์‚ฌ์šฉ โ†’ FIFO ์›์น™์œผ๋กœ ํƒ์ƒ‰

๐Ÿ“–๊ณผ์ •

  1. ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•ด ํ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
  2. ํ์—์„œ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ด ํ•ด๋‹น ๋…ธ๋“œ์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ ๋…ธ๋“œ ์ •๋ณด๋ฅผ ์ „๋ถ€ ํ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
  • ํ•ด๋‹น ์ธ์ ‘ ๋…ธ๋“œ๋“ค ์ „๋ถ€ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
  1. 2๋ฒˆ ๊ณผ์ •์„ ๋” ์ด์ƒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์„ ๋•Œ(ํ์— ๋…ธ๋“œ๊ฐ€ ํ•˜๋‚˜๋„ ์—†์„ ๋•Œ)๊นŒ์ง€ ๋ฐ˜๋ณต

๐Ÿ“–๊ตฌํ˜„

๐Ÿ“ŽQueue

from collections import deque
 
def bfs(graph, start):
    queue = deque([start])
    visited = []
    
    while queue:
        node = queue.popleft()
        visited.append(node)
        
        for adj in graph[node]:
            if adj in not visited:
                queue.append(adj)
  • visited์— ํƒ์ƒ‰ ์ˆœ์„œ๋Œ€๋กœ ๋…ธ๋“œ๊ฐ€ ๋“ค์–ด๊ฐ

๐Ÿ“–์‹œ๊ฐ„ ๋ณต์žก๋„

๊ทธ๋ž˜ํ”„ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์‹œ๊ฐ„๋ณต์žก๋„
์ธ์ ‘ ํ–‰๋ ฌO(nยฒ)
์ธ์ ‘ ๋ฆฌ์ŠคํŠธO(n+e)

๐Ÿ“–BFS & DFS