๋ฐ์ํ

๐ ๊น์ด ์ฐ์ ํ์(DFS) ์ด๋
- ๊น์ด๋ฅผ ์ฐ์ ์ผ๋ก ํ์ฌ ํ์์ ์ํํ๋ ์๊ณ ๋ฆฌ์ฆ
- ํน์ ๋ ธ๋์์ ์์ํด์ ๋ค์ ๋ถ๊ธฐ๋ก ๋์ด๊ฐ๊ธฐ ์ ์ ํด๋น ๋ถ๊ธฐ๋ฅผ ์๋ฒฝํ๊ฒ ํ์ํ๋ ๋ฐฉ๋ฒ!
- ex) ๋ฏธ๋กํ์ - ๋งํ ๋ ๊น์ง ๊ณ์ ๊ฐ๋ค๊ฐ ๋ง๋ค๋ฅธ ๊ธธ์ด ๋์ค๋ฉด ๊ฐ์ฅ ์ต๊ทผ์ ๊ฐ๋ฆผ๊ธธ๋ก ๋์๊ฐ ๋ค์ ๊ธธ์ ์ฐพ๋ ๊ฒ!
- ๊ฒฝ๋ก๋ฅผ ์ฐพ๊ณ ์ถ์ ๋
- ์คํ์ ๊ทธ๋ํ๋ก ํด๊ฒฐํ๋ค. ( ์ฌ๊ทํจ์๋ฅผ ์จ๋ ๋จ )
์คํ์ผ๋ก ์ฌ์ฉ์ ์ด์ ์ค ๊ฐ์ฅ ๋ค์ ์๋ ๊ฒ๋ถํฐ,
์ฌ๊ท ์ฌ์ฉ์ ์ด์ ์ค ๊ฐ์ฅ ์์ ์๋ ๊ฒ๋ถํฐ ํ์ํ๋ค.
๐ ๊น์ด ์ฐ์ ํ์(DFS) ๊ตฌํ
def dfs(c):
print(c, end=' ')
for neighbor in adj[c]: # c์ ์ด์ ์ค
if visited[neighbor] == 0: # ๋ฐฉ๋ฌธ ์์ง ์ํ ์น๊ตฌ์ด๋ฉด
visited[neighbor] = 1
dfs(neighbor)
# ์ธ์ ๋ฆฌ์คํธ
# ๋
ธ๋: 1,2,3,4,5,6,7
n = 10
adj = {x: [] for x in range(1, n + 1)}
edges = [
[1, 2],
[1, 5],
[1, 9],
[2, 3],
[3, 4],
[5, 6],
[5, 8],
[6, 7],
[9, 10]
]
# ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์ด๋ฏ๋ก ๋ฐ๋์ชฝ๋ ์ฑ๋ฆฝ
for edge in edges:
s, e = edge
adj[s].append(e)
adj[e].append(s)
print(adj)
# 1๋ถํฐ ํ์
k = 1
visited = [0] * (n + 1)
visited[k] = 1
print('๋ฐฉ๋ฌธ ์์')
dfs(k)
๋ฐ์ํ
'CS > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ(kruskal) (0) | 2020.09.30 |
---|---|
์๋ก์ ์งํฉ(Disjoint-set) (0) | 2020.09.29 |
๋๋น ์ฐ์ ํ์(Breath First Search, BFS) (0) | 2020.09.27 |
๊ณ์ ์ ๋ ฌ(counting sort) (0) | 2020.09.26 |
๋ณํฉ ์ ๋ ฌ(merge sort) (0) | 2020.09.25 |