Depth First Search
์คํ๊ณผ ์ฌ๊ทํจ์๋ก ๊ตฌํ
- ํ์ ์์ ๋ ธ๋๋ฅผ ์คํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
- ์คํ์ ์ต์๋จ ๋ ธ๋์ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋๊ฐ ์์ผ๋ฉด ๊ทธ ์ธ์ ๋ ธ๋๋ฅผ ์คํ์ ๋ฃ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค. ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋๊ฐ ์์ผ๋ฉด ์คํ์์ ์ต์๋จ ๋ ธ๋๋ฅผ ๊บผ๋ธ๋ค.
- 2๋ฒ์ ๊ณผ์ ์ ๋ ์ด์ ์ํํ ์ ์์ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
# DFS ํจ์ ์ ์ - graph๋ ์ธ์ ๋ฆฌ์คํธ
def dfs(graph, v, visited):
# ํ์ฌ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
visited[v] = True
print(v, end=' ')
# ํ์ฌ ๋
ธ๋์ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ๋
ธ๋๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๋ฐฉ๋ฌธ
for i in graph[v]:
if not visited[i]: #๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด
dfs(graph, i, visited)
Breadth First Search
while๋ฌธ๊ณผ deque๋ก ๊ตฌํ
- ํ์ ์์ ๋ ธ๋๋ฅผ ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
- ํ์์ ๋ ธ๋๋ฅผ ๊บผ๋ด(
popleft()
) ํด๋น ๋ ธ๋์ ์ธ์ ๋ ธ๋ ์ค์์ ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋๋ฅผ ๋ชจ๋ ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.- 2๋ฒ์ ๊ณผ์ ์ ๋ ์ด์ ์ํํ ์ ์์ ๋๊น์ง(ํ๊ฐ ๋น์ด์์ ๋ ๊น์ง) ๋ฐ๋ณต (while)ํ๋ค.
[์ฐธ๊ณ ]๋ฏธ๋กํ์ ๋ฑ ์ขํ๋ฅผ ์ฌ์ฉํ๋ ๋ฌธ์ ์ ๊ฒฝ์ฐ
# BFS ํจ์ ์ ์ - graph๋ ์ธ์ ๋ฆฌ์คํธ
def bfs(graph, start, visited):
# ํ(Queue) ๊ตฌํ์ ์ํด deque ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ
queue = deque([start])
# ํ์ฌ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
visited[start] = True
# ํ๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต
while queue:
# ํ์์ ํ๋์ ์์๋ฅผ ๋ฝ์ ์ถ๋ ฅ
v = queue.popleft()
print(v, end=' ')
# ํด๋น ์์์ ์ฐ๊ฒฐ๋, ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์์๋ค์ ํ์ ์ฝ์
for i in graph[v]:
if not visited[i]:
queue.append(i)
visited[i] = True
- ์ธ์ ํ๋ ฌ (Adjacency Matrix) : 2์ฐจ์ ๋ฐฐ์ด๋ก ๊ทธ๋ํ์ ์ฐ๊ฒฐ ๊ด๊ณ๋ฅผ ํํ
#์ธ์ ํ๋ ฌ [[0,7,5], [7,0,999999999], [5,999999999,0]]
- ์ธ์ ๋ฆฌ์คํธ (Adjacency List) : ๋ฆฌ์คํธ๋ก ๊ทธ๋ํ์ ์ฐ๊ฒฐ ๊ด๊ณ๋ฅผ ํํ
#์ธ์ ๋ฆฌ์คํธ [[(1,7),(2,5)], [(0,7)], [(0,5)]]
stack = []
stack.append(5)
stack.pop()
from collections import deque
#Deque ์ด๊ธฐํ
# ๋น์ด์๋ ํ ๋ง๋ค๊ธฐ
deque = deque()
# ์์๊ฐ ์๋ ํ ๋ง๋ค๊ธฐ
deque = deque([1, 2, 3])
# ํ ์ต๋ ๊ธธ์ด ๋ช
์ํ๊ธฐ(์์๋ฅผ maxlen๋ณด๋ค ๋ ๋ง์ด ๋ฃ์ผ๋ฉด maxlen์ด ์๋ ๊ฐฑ์ ๋จ)
deque = deque(maxlen=5)
# deque์ ์ถ๊ฐ
deque.append(i)
# deque์์ ๊บผ๋ด๊ธฐ
deque.popleft()
์ฐธ๊ณ )