Algo-dfs.md
๊น์ด ์ฐ์ ํ์์ด๋ผ๊ณ ๋ถ๋ฅด๋ DFS ์๊ณ ๋ฆฌ์ฆ์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค.
๊ฐ๋
๊น์ด ์ฐ์ ํ์
DFS - Depth First Search

ํ ๋ฐฉํฅ์ผ๋ก ์ธ์ ํ ๋ ธ๋๊ฐ ์์ ๋๊น์ง(๊ฐ์ฅ ๊น์ ๋ ธ๋๊น์ง) ํ์ํ ๋ค ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ํ์์ ํ๋ ๋ฐฉ์
โ ํน์ง
๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ํด์ผ ํ ๋ ํ์ฉํ๊ธฐ ์ข์ ๋ฐฉ์
BFS์ ๋นํด ๊ฐ๋จ
๋จ์ ๊ฒ์ ์๋๋ BFS์ ๋นํด ๋๋ฆผ
โ ํ์ ๊ณผ์
ํ์ฌ ๋ ธ๋์ ์ธ์ ํ๊ณ ๋ฐฉ๋ฌธ๋์ ์๋(์คํ์ ์์์ธ) ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธ
ํ์ฌ ๋ ธ๋์์ ์ธ์ ํ๊ณ ๋ฐฉ๋ฌธ๋ ์ ์๋ ๋ ธ๋๊ฐ ์์ ๊ฒฝ์ฐ backtrackingํ์ฌ ๋ค๋ฅธ ๋ฐฉํฅ์ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ค.
โ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ ๊ตฌํ ๋ฐฉ์์๋ ํ๋ ฌ(2์ฐจ์ ๋ฐฐ์ด)๋ก ๊ตฌํํ๋ ์ธ์ ํ๋ ฌ ๋ฐฉ์๊ณผ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ๊ตฌํํ๋ ์ธ์ ๋ฆฌ์คํธ ๋ฐฉ์์ด ์๋ค.
๋ํ ๊ธฐ๋ณธ์ ์ผ๋ก ์คํ์ ์ฌ์ฉํ์ฌ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก๋ ์ฌ๊ท ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋งค์ฐ ๊ฐ๊ฒฐํ๊ฒ ๊ตฌํํ ์ ์๋ค.
Adjacency Matrix - ์ธ์ ํ๋ ฌ
#์์ ๊ทธ๋ํ๋ฅผ 2์ฐจ์ ๋ฆฌ์คํธ๋ก ํํํ๋ฉด
graph = [
[0,1,1,1],
[1,0,0,1],
[1,0,0,1],
[1,1,1,0]
]
Adjacency List - ์ธ์ ๋ฆฌ์คํธ
#์์ ๊ทธ๋ํ๋ฅผ ์ธ์ ๋ฆฌ์คํธ(1์ฐจ์ ๋ฆฌ์คํธ)๋ก ํํํ๋ฉด
graph [[2,3,4],[1,4],[1,4]],[1,2,3]
์ค์ ๊ตฌํ
def dfs(graph, v, visited):
#V : ํ์ฌ ๋
ธ๋
visited[v] = True
print(v, end=' ')
for i in graph[v]:
if not visited[i]:
dfs(graph, i, visited) #ํ์ฌ ๋
ธ๋์ ์ธ์ ํ ๋ค๋ฅธ ๋
ธ๋๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๋ฐฉ๋ฌธ
# ์ธ์ ๋ฆฌ์คํธ ๋ฐฐ์ด -> graph[][]
# ๋ฐฉ๋ฌธ์ฌ๋ถ ๋ฐฐ์ด -> visited[]
graph = [
[],
[2, 3, 8],
[1, 7],
[1, 4, 5],
[3, 5],
[3, 4],
[7],
[2, 6, 8],
[1, 7]
]
visited = [False] * 9
# ์ต์๋จ ๋
ธ๋ 1
dfs(graph, 1, visited)
Last updated