๐[Search] DFS๋?
DFS๋?
์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ ์ค ํ๋์ธ DFS
.
๊น์ด ์ฐ์ ํ์
์ ์ฝ์๋ก, ๊ทธ๋ํ์ ๊น์ ๋ถ๋ถ์ ์ฐ์ ์ ์ผ๋ก ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์.
์์ ๋ ธ๋์์ ์ถ๋ฐํด์, ํ ๋ฐฉํฅ์ผ๋ก ๊ฐ ์ ์๋ ํ ๊น๊ฒ ํ์ํ ํ, ๋ ์ด์ ๊ฐ ๊ณณ์ด ์์ผ๋ฉด ์ด์ ๋ถ๊ธฐ์ ์ผ๋ก ๋์๊ฐ ๋ค๋ฅธ ๊ฒฝ๋ก๋ฅผ ํ์ํจ.
์๋๋ฉด DFS๋ ์คํ์ด๋ ์ฌ๊ท๋ฅผ ์ฌ์ฉํด์ ๊ตฌํํ ์ ์๊ณ , ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๊ณ ์ ํ ๋ ์ ์ฉํ๊ธฐ ๋๋ฌธ์.
DFS๋ ๊ฒฝ๋ก์ ์กด์ฌ ์ฌ๋ถ, ๊ทธ๋ํ์ ์ฐ๊ฒฐ ์์ ์ฐพ๊ธฐ ๋ฑ์ ์ฌ์ฉ๋จ.
python ์๋์ฝ๋
def DFS(graph, node, visited):
if node in visited:
return
visited.append(node)
for i in graph[node]:
if i not in visited:
DFS(graph, i, visited)
if node in visited:
: ๋ฐฉ๋ฌธ ๊ธฐ๋ก์ node๊ฐ ์์ผ๋ฉด?return
: ํ ๋ฒ ๋ฐฉ๋ฌธํ ๋ ธ๋๋ ๋ ๋ค์ ๋ฐฉ๋ฌธํ์ง ์๊ธฐ ๋๋ฌธ์ ์ข ๋ฃ
visited.append(node)
: ๋ฐฉ๋ฌธ ๊ธฐ๋ก์ node๊ฐ ์์ผ๋ฉด ํด๋น node ๋ฐฉ๋ฌธ ๊ธฐ๋ก์ ์ถ๊ฐfor i in graph[node]:
: node์ leaf ๋ ธ๋๋ค์ ํ์if i not in visited:
: node์ leaf ๋ ธ๋๋ค ์ค ๋ฐฉ๋ฌธ ๊ธฐ๋ก์ ์์ผ๋ฉด?DFS(graph, i, visited)
: DFS๋ฅผ ๋ค์ ์คํ(์ฌ๊ท)
์ ์ฉ ์ฌ๋ก
DFS๋ BFS์ ๊ฐ์ด ๊ทธ๋ํ๋ฅผ ์ ์ฒด ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์.
์ด ๋ฐฉ๋ฒ๋ค์ ์ฌ์ฉํ์ฌ ํ ์ ์๋ ๋ํ์ ์ธ ๋ฌธ์ ๋ค์ด ๋ฏธ๋ก ์ฐพ๊ธฐ
, ํผ์ฆ ๊ฒ์
, ๋คํธ์ํฌ ์ฐ๊ฒฐ ์ํ ํ์ธ
๋ฑ์ด ์์.
๋จ, DFS๋ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ํ์ํ๋ฉฐ ํด๊ฒฐ์ฑ ์ ์ฐพ๊ณ , BFS๋ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฐฉ์์์ ์ฐจ์ด๊ฐ ์๊ธด ํจ!
์ฝ๋ฉํ ์คํธ ์ค๋นํ ๋ ํ์ ์๊ณ ๋ฆฌ์ฆ์..!
๋๊ธ๋จ๊ธฐ๊ธฐ