๐Graph
๐BFS(Breadth-First Search)
์์ ๋ ธ๋์ ์ธ์ ํ ๋ ธ๋๋ถํฐ ํ์ํ๋ ๊ทธ๋ํ ์ํ ๋ฐฉ๋ฒ

๐ํน์ง
- ์ง๊ด์ ์ด์ง ์์
- ์์ ๋ ธ๋์์ ์์ํด์ ๊ฑฐ๋ฆฌ์ ๋ฐ๋ผ ๋จ๊ณ๋ณ๋ก ํ์
- ์ฌ๊ท์ ์ผ๋ก ๋์ํ์ง ์์
- ๋ฐฉ๋ฌธํ ๋
ธ๋๋ค์ ์ฐจ๋ก๋ก ์ ์ฅํ ํ ๊บผ๋ผ ์ ์๋ ์๋ฃ ๊ตฌ์กฐ์ธ
Queue๋ฅผ ์ฌ์ฉ โ FIFO ์์น์ผ๋ก ํ์
๐๊ณผ์

- ์์ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํด ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
- ํ์์ ๋ ธ๋๋ฅผ ๊บผ๋ด ํด๋น ๋ ธ๋์ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋ ์ ๋ณด๋ฅผ ์ ๋ถ ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
- ํด๋น ์ธ์ ๋ ธ๋๋ค ์ ๋ถ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
- 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) |