๋ฐ์ํ
๐ ๋๋น ์ฐ์ ํ์(BFS) ์ด๋
- ๋๋น๋ฅผ ์ฐ์ ์ผ๋ก ํ์ฌ ํ์์ ์ํํ๋ ์๊ณ ๋ฆฌ์ฆ
- ์ต๋จ๊ฒฝ๋ก(์ต๋จ๊ธธ์ด)๋ฅผ ์ฐพ์ ๋ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
- ํ์ ๊ทธ๋ํ๋ก ํด๊ฒฐํ๋ค. (ํ์ด์ฌ์์๋ ๋ฐํฌ(deque)๋ฅผ ์ฐ๋ฉด ์๋๊ฐ ๋น ๋ฆ)
๐ ๋๋น ์ฐ์ ํ์(BFS) ๊ตฌํ
from collections import deque
# ์ธ์ ๋ฆฌ์คํธ
# ๋
ธ๋: 1,2,3,4,5,6,7
n = 7
adj = {x: [] for x in range(1, n + 1)}
edges = [
[1, 2],
[1, 3],
[2, 4],
[2, 5],
[3, 6],
[3, 7]
]
# ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์ด๋ฏ๋ก ๋ฐ๋์ชฝ๋ ์ฑ๋ฆฝ
for edge in edges:
s, e = edge
adj[s].append(e)
adj[e].append(s)
print(adj)
# bfs ๋ queue๋ฅผ ์ฌ์ฉํ๋ค. ์๋๊ฐ ๋น ๋ฅธ๋ฐํฌ๋ฅผ ์ฌ์ฉ
q = deque()
q.append(1)
visited = [False] * (n + 1) # ๊ฐ ์ธ๋ฑ์ค ๋ฐฉ๋ฌธํ ์ ์ด ์๋์ง
visited[1] = True
visited_seq = []
while q:
c = q.popleft() # ํ ๊ตฌ์กฐ ์ด๋ฏ๋ก ๊ฐ์ฅ ์์์์(์ ์ผ ์ฒ์์ ๋ค์ด์จ)๋ฅผ ๊บผ๋ธ๋ค.
for neighbor in adj[c]: # c์ ์ด์ ๋
ธ๋(c์์ ๋ฐ๋ก ๊ฐ ์ ์๋ ๊ณณ)
if not visited[neighbor]: # ๋ฐฉ๋ฌธํ์ ์ด ์์ผ๋ฉด
q.append(neighbor) # ํ์ ๋ฃ์ด์ฃผ๊ณ
visited[neighbor] = True # ๋ฐฉ๋ฌธ ํ์
visited_seq.append(c) # ์ฌ๊ธด ์์จ์ค๋ ๋๋ค. ๋จ์ง ๋ฐฉ๋ฌธ์์๋ฅผ ๋ํ๋ด๊ธฐ ์ํ ๊ฒ
print(f'๋ฐฉ๋ฌธ์์ {visited_seq}')
๋ฐ์ํ
'CS > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ก์ ์งํฉ(Disjoint-set) (0) | 2020.09.29 |
---|---|
๊น์ด ์ฐ์ ํ์(Depth First Search, DFS) (0) | 2020.09.28 |
๊ณ์ ์ ๋ ฌ(counting sort) (0) | 2020.09.26 |
๋ณํฉ ์ ๋ ฌ(merge sort) (0) | 2020.09.25 |
ํต ์ ๋ ฌ(quick sort) (1) | 2020.09.24 |