BFS(๋๋น ์ฐ์ ํ์)
1. BFS(Breadth-First Search)๋?
BFS์๊ณ ๋ฆฌ์ฆ์ ๋๋น ์ฐ์ ํ์์ด๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค. ์ด๋ ๊ฐ๊น์ด ๋
ธ๋๋ถํฐ ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ ๋ป์ด๋ค.
DFS๋ ์ต๋ํ ๋ฉ๋ฆฌ์๋(๊น์) ๋
ธ๋๋ถํฐ ํ์ํ๋๊ฒ์ ๋นํด BFS๋ ๊ฐ๊น์ด ๋
ธ๋๋ถํฐ ํ์ํ๋ฏ๋ก ์ด ๋๊ฐ๋ฅผ ์ ์ ํ๊ฒ ์ฌ์ฉํด์ผ ํ๋ค.
BFS ๊ตฌํ์์๋ ์ ์
์ ์ถ, ์ฆ ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋๊ฒ์ด ์ ์์ด๋ค.
BFS ์๊ณ ๋ฆฌ์ฆ์ ๋์๋ฐฉ์์๋
1. ํ์ ์์ ๋
ธ๋๋ฅผ ํ์ ์ฝ์
ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
2. ํ์์ ๋
ธ๋๋ฅผ ๊บผ๋ด ํด๋น ๋
ธ๋์ ์ธ์ ๋
ธ๋ ์ค์์ ๋ฐฉ๋ฌธํ์ง ์์ ๋
ธ๋๋ฅผ ๋ชจ๋ ํ์ ์ฝ์
ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
3. 2๋ฒ์ ๊ณผ์ ์ ๋ ์ด์ ์ํํ ์ ์์ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
2. ์์ ์ฝ๋
from collections import deque
def bfs(graph, start, visited):
q = deque([start]) # q์ ์ธ (start๋ฅผ ์ฒซ ์ธ์๋ก ๋ฃ์)
visited[start] = True # ๋ฐฉ๋ฌธ ํ์
while q: # q๊ฐ ๋น๋๊น์ง
v = q.popleft() # ๊ฐ์ฅ์ผ์ชฝ(๊ฐ์ฅ๋จผ์ )์์ ๋ฝ์์ v์ ๋์
print(v, end = ' ')
for i in graph[v]:
if not visited[i]:
q.append(i)
visited[i] = True
n = int(input()) # ๋
ธ๋์ ๊ฐ์
graph = [[] * (n + 1)]
for _ in range(1, n+1):
array = list(map(int, input().split()))
graph.append(array)
visited = [False] * (n + 1) #[0]์ ์ฌ์ฉ x
bfs(graph, 1, visited)
3. ์์ ์
์ถ๋ ฅ
(๊ฐ์ ํ์ ํด๋นํ์ index์ ์ฐ๊ฒฐ๋๊ฒ์ด๋ค. (๋
ธ๋1์ ๋
ธ๋2,๋
ธ๋3,๋
ธ๋8๊ณผ ์ฐ๊ฒฐ))
์
๋ ฅ:
(๋
ธ๋1) 2 3 8
(๋
ธ๋2) 1 7
(๋
ธ๋3) 1 4 5
(๋
ธ๋4) 3 5
(๋
ธ๋5) 3 4
(๋
ธ๋6) 7
(๋
ธ๋7) 2 6 8
(๋
ธ๋8) 1 7
์ถ๋ ฅ:
๋
ธ๋ 1์์ bfs๋ฅผ ๊ตฌํ๋ฉด
output = 1 2 3 8 7 4 5 6