DFS( Depth-First Search)
- ๊น์ด์ฐ์ ํ์(DFS) : ์คํ ์๋ฃ๊ตฌ์กฐ(ํน์ ์ฌ๊ทํจ์)๋ฅผ ์ด์ฉ, ๊น์ ๋ถ๋ถ์ ์ฐ์ ์ ์ผ๋ก ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ
- ํ์ ์์ ๋
ธ๋๋ฅผ ์คํ์ ๊ฐ์
ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํฉ๋๋ค.
- ์คํ์ ์ต์๋จ ๋
ธ๋์ ๋ฐฉ๋ฌธํ์ง ์๋ ์
์ ํ ๋
ธ๋๊ฐ ํ๋๋ผ๋ ์์ผ๋ฉด ๊ทธ ๋
ธ๋๋ฅผ ์คํ์ ๋ฃ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํฉ๋๋ค. ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋
ธ๋๊ฐ ์์ผ๋ฉด ์คํ์์ ์ต์๋จ ๋
ธ๋๋ฅผ ๊บผ๋
๋๋ค.
- ๋์ด์ 2๋ฒ์ ๊ณผ์ ์ ์ํํ ์ ์์ ๋๊น์ง ๋ฐ๋ณตํฉ๋๋ค.
- DFS, BFS ๋ ๋ค ์๊ฐ ๋ณต์ก๋๋ ๊ฐ๋ค
- ์ค์ ๋ก๋ ์คํ์์ญ(ํน์ ์ฌ๊ทํจ์)๋ฅผ ์ฌ์ฉํ์ง ์๋ BFS(๋ฐ๋ณต๋ฌธ)๋ก ํธ๋ ๊ฒ์ด ๋ ๋น ๋ฅผ ์ ์๋ค
graph = [
[],
[2,3,8],
[1,7],
[1,4,5],
[3,5],
[3,4],
[7],
[2,6,8],
[1,7]
]
visited = [False]*9
def dfs(graph, v, visited) :
visited[v] = True
print(v, end=" ")
for i in graph[v] :
if not visited[i] :
dfs(graph, i, visited)
BFS (Breadth-First Search)
- BFS๋ ๋๋น์ฐ์ ํ์
- ๊ทธ๋ํ์์ ๊ฐ๊น์ด ๋
ธ๋๋ถํฐ ์ฐ์ ์ ์ผ๋ก ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ
- ํ ์๋ฃ๊ตฌ์กฐ ์ฌ์ฉ
- ํ์ ์์ ๋
ธ๋๋ฅผ ํ์ ์ฝ์
ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํฉ๋๋ค.
- ํ์์ ๋
ธ๋๋ฅผ ๊บผ๋ธ ๋ค ํด๋น ๋
ธ๋์ ์ธ์ ๋
ธ๋ ์ค์์ ๋ฐฉ๋ฌธํ์ง ์์ ๋
ธ๋๋ฅผ ๋ชจ๋ ํ์ ์ฝ์
ํ๊ณ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ํฉ๋๋ค.
- ๋ ์ด์ 2๋ฒ์ ๊ณผ์ ์ ์ํํ ์ ์์ ๋๊น์ง ๋ฐ๋ณตํฉ๋๋ค.
from collections import deque
graph = [
[],
[2,3,8],
[1,7],
[1,4,5],
[3,5],
[3,4],
[7],
[2,6,8],
[1,7]
]
visited = [False]*9
def bfs(graph, start, visited) :
queue = deque([start])
visited[start] = True
while queue :
#๊ฐ์ ์ ๊ทผํ๋ค.
v = queue.popleft()
print(v, end=" ")
#์ธ์ ๋
ธ๋๋ค ์ค ๋ฐฉ๋ฌธ๊ฐ๋ฅํ ๋
ธ๋์ ๊ฒฝ์ฐ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ํ ํ์ ๋ฃ๋๋ค.
for i in graph[v] :
if not visited[i] :
visited[i] = True
queue.append(i)