Algorithm/Python
[Python] DFS ์๊ณ ๋ฆฌ์ฆ
ํ์งฑ.
2023. 11. 13. 10:39
728x90
๐ก DFS
- DFS(๊น์ด์ฐ์ ํ์)๋ ๊ทธ๋ํ์ ๋ชจ๋ ์ ์ ์ ๋ฐฉ๋ฌธํ๋ ์๊ณ ๋ฆฌ์ฆ
- ํ ์ ์ ์์ ์์ํ์ฌ ๋ค์ ๋ถ๊ธฐ๋ก ๋์ด๊ฐ๊ธฐ ์ ์ ํด๋น ๋ถ๊ธฐ๋ฅผ ์์ ํ ํ์ํ๋ ๋ฐฉ์
๐ก ๋์ ๊ณผ์
- ํ์ ์์ ๋ ธ๋๋ฅผ ์คํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ ํ๋ค.
- ์คํ์ ์ต์๋จ ๋ ธ๋์ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋๊ฐ ์๋ค๋ฉด ๊ทธ ์ธ์ ๋ ธ๋๋ฅผ ์คํ์ ๋ฃ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค. ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋๊ฐ ์์ผ๋ฉด ์คํ์์ ์ต์๋จ ๋ ธ๋๋ฅผ ๊บผ๋ธ๋ค.
- 2๋ฒ์ ๊ณผ์ ์ ๋ ์ด์ ์ํํ ์ ์์ ๋ ๊น์ง ๋ฐ๋ณตํ๋ค.
๐ก ํ์ด์ฌ ์ฝ๋
# DFS ํจ์ ๊ตฌํ
def dfs(graph, v, visited):
visited[v] = True # ํ์ฌ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
print(v, end = ' ') # ๋ฐฉ๋ฌธํ ๋
ธ๋ ์ถ๋ ฅ
# ํ์ฌ ๋
ธ๋์ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ๋
ธ๋๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๋ฐฉ๋ฌธ
for i in graph(v):
if i not visited[i]: # i๊ฐ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ ๋์ง ์์๋ค๋ฉด
dfs(graph, i, visited) # ์ฌ๊ท
# ๊ทธ๋ํ ์ ์
graph = [
[],
[2, 3, 8],
[1, 7],
[1, 4, 5],
[3, 5],
[3, 4],
[7],
[2, 6, 8],
[1, 7]
]
visited = [False] * (len(graph) + 1) # ๊ฐ ๋
ธ๋์ ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ๋ฆฌ์คํธ ์ด๊ธฐํ
dfs(graph, 1, visited) # 1๋ฒ ๋
ธ๋๋ถํฐ DFS ํ์ ์์
โ๏ธ dfs ํจ์ : ํ์ฌ ๋ ธ๋์์ ์์ํ์ฌ ๊น์ด ์ฐ์ ํ์ ์ํ
โ๏ธ visited ๋ฆฌ์คํธ : ๊ฐ ๋ ธ๋์ ๋ฐฉ๋ฌธ ์ฌ๋ถ ๋ํ๋ด๋ฉฐ, ์ด๊ธฐ์๋ ๋ชจ๋ ๋ ธ๋๊ฐ ๋ฐฉ๋ฌธํ์ง ์์ ์ํ๋ก ์ด๊ธฐํ
โ๏ธ ํจ์๊ฐ ํธ์ถ๋๋ฉด ํ์ฌ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌํ๊ณ ์ถ๋ ฅ
โ๏ธ ํ์ฌ ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ๋ ธ๋ ์ค ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋๊ฐ ์๋ค๋ฉด ํด๋น ๋ ธ๋๋ก ์ฌ๊ท ํธ์ถ
โ๏ธ ์ด ๊ณผ์ ๋ฐ๋ณต
728x90