๐Graph
๐DFS(Depth-First Search)
์์ ๋ ธ๋์์ ์์ํด์
branch(๋ค์ ๋ถ๊ธฐ)๋ก ๋์ด๊ฐ๊ธฐ ์ ์ ํด๋น ๋ถ๊ธฐ๋ฅผ ์๋ฒฝํ๊ฒ ํ์ํ๋ ๊ทธ๋ํ ์ํ ๋ฐฉ๋ฒ

๐ํน์ง
- ์ฌ๊ท์ ์ผ๋ก ๋์
- ๊ทธ๋ํ์ cycle์ด ์๋์ง ํ์ ๊ฐ๋ฅ
- ํ์ฌ ์ํ ์ค์ธ ๋
ธ๋๋ง ์ ์ฅํ๋
stack์ ์ฌ์ฉํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ญ๋น๊ฐ ์ ์
๐๊ณผ์

- ์์ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํด ์คํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
- ์คํ์
top์ ์์นํ๋ ๋ ธ๋์ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋ ์ ๋ณด๋ฅผ ์ ๋ถ ์คํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ - ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋
ธ๋๊ฐ ์๋ค๋ฉด ์คํ์
top์ pop - 2,3 ๋ฒ์ ๊ณผ์ ์ ๋ ์ด์ ์ํํ ์ ์์ ๋(์คํ์ ๋ ธ๋๊ฐ ํ๋๋ ์์ ๋)๊น์ง ๋ฐ๋ณต
๐๊ตฌํ
๐์ฌ๊ท
from collections import deque
visited = []
def dfs(graph, node, visited):
visited.append(node)
for adj in graph[node]:
if adj not in visited:
dfs(graph, i, visited)- visited์ ํ์ ์์๋๋ก ๋ ธ๋๊ฐ ๋ค์ด๊ฐ
๐Stack
def dfs(graph, node):
stack = [node]
visited = []
while stack:
v = stack.pop()
visited.append(v)
for adj in graph[v]:
if adj not in visited:
stack.append(i)- visited์ ํ์ ์์๋๋ก ๋ ธ๋๊ฐ ๋ค์ด๊ฐ
๐์๊ฐ ๋ณต์ก๋
| ๊ทธ๋ํ ๊ตฌํ ๋ฐฉ๋ฒ | ์๊ฐ๋ณต์ก๋ |
|---|---|
| ์ธ์ ํ๋ ฌ | O(nยฒ) |
| ์ธ์ ๋ฆฌ์คํธ | O(n+e) |