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)
'Algorithm > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ (Two Pointers) (0) | 2022.02.19 |
---|---|
[Algorithm] ํด๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ (Kruskal Algorithm) (0) | 2021.05.18 |
[Algorithm] ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ (0) | 2021.05.18 |