Algo-bfs.md
๋๋น ์ฐ์ ํ์์ด๋ผ๊ณ ๋ถ๋ฅด๋ BFS ์๊ณ ๋ฆฌ์ฆ์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค.
๊ฐ๋
๋๋น ์ฐ์ ํ์
BFS - Breadth First Search
์ธ์ ํ ๋ ธ๋๋ถํฐ ํ๋์ฉ ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
BFS๋ ํ(Queue)๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ๋ค.
ํน์ง
ํ-Queue๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ๋ค.
์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ ์ค์ ์ํ ์๊ฐ์ DFS๋ณด๋ค ์ข์ ํธ์ด๋ค.
ํ์ ๊ณผ์
ํ์ ์์ ๋ ธ๋๋ฅผ ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
ํ์์ ๋ ธ๋๋ฅผ ๊บผ๋ด ํด๋น ๋ ธ๋์ ์ธ์ ๋ ธ๋ ์ค ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋๋ฅผ ๋ชจ๋ ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ์ฒ๋ฆฌํ๋ค.
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