Algorithm/Python

[Python] DFS ์•Œ๊ณ ๋ฆฌ์ฆ˜

ํ•˜์งฑ. 2023. 11. 13. 10:39
728x90


๐Ÿ’ก DFS

  • DFS(๊นŠ์ด์šฐ์„ ํƒ์ƒ‰)๋Š” ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ์ •์ ์„ ๋ฐฉ๋ฌธํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ํ•œ ์ •์ ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๋‹ค์Œ ๋ถ„๊ธฐ๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์— ํ•ด๋‹น ๋ถ„๊ธฐ๋ฅผ ์™„์ „ํžˆ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹

๐Ÿ’ก ๋™์ž‘ ๊ณผ์ •

  1. ํƒ์ƒ‰ ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ ํ•œ๋‹ค.
  2. ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ ๋…ธ๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ทธ ์ธ์ ‘ ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค. ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฉด ์Šคํƒ์—์„œ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ธ๋‹ค.
  3. 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