DFS μ•Œκ³ λ¦¬μ¦˜μ€ λ¨Ό λ…Έλ“œλΆ€ν„° νƒμƒ‰ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ©°, ν›„μž… μ„ μΆœ 방식인 μŠ€νƒ 자료ꡬ쑰λ₯Ό μ‚¬μš©ν•œλ‹€.

  1. 탐색 μ‹œμž‘ λ…Έλ“œλ₯Ό μŠ€νƒμ— μ‚½μž…ν•˜κ³  λ°©λ¬Έ 처리λ₯Ό ν•œλ‹€.
  2. μŠ€νƒμ˜ μ΅œμƒλ‹¨ λ…Έλ“œμ— λ°©λ¬Έν•˜μ§€ μ•Šμ€ 인접 λ…Έλ“œκ°€ 있으면 κ·Έ 인접 λ…Έλ“œλ₯Ό μŠ€νƒμ— λ„£κ³  λ°©λ¬Έ 처리λ₯Ό ν•œλ‹€. λ°©λ¬Έν•˜μ§€ μ•Šμ€ 인접 λ…Έλ“œκ°€ μ—†μœΌλ©΄ μŠ€νƒμ—μ„œ μ΅œμƒλ‹¨ λ…Έλ“œλ₯Ό κΊΌλ‚Έλ‹€.
  3. 2번의 과정을 더 이상 μˆ˜ν–‰ν•  수 없을 λ•ŒκΉŒμ§€ λ°˜λ³΅ν•œλ‹€.
def dfs(graph, v, visited):
  # ν˜„μž¬ λ…Έλ“œλ₯Ό 방문처리
  visited[v] = True
  print(visited)
  print(v, end=' ')
  for i in graph[v]:
    if not visited[i]:
      dfs(graph, i, visited)

# 1
graph = [
  [],
  [2, 3, 8],
  [1, 7],
  [1, 4, 5],
  [3, 5],
  [3, 4],
  [7],
  [2, 6, 8],
  [1, 7]
]

visited = [False] * 9

dfs(graph, 1, visited)

BFS μ•Œκ³ λ¦¬μ¦˜μ€ κ°€κΉŒμš΄ λ…Έλ“œλΆ€ν„° νƒμƒ‰ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ©°, μ„ μž… μ„ μΆœ 방식인 큐 자료ꡬ쑰λ₯Ό μ‚¬μš©ν•œλ‹€.

  1. 탐색 μ‹œμž‘ λ…Έλ“œλ₯Ό 큐에 μ‚½μž…ν•˜κ³  λ°©λ¬Έ 처리λ₯Ό ν•œλ‹€.
  2. νμ—μ„œ λ…Έλ“œλ₯Ό κΊΌλ‚΄ ν•΄λ‹Ή λ…Έλ“œμ˜ 인접 λ…Έλ“œ μ€‘μ—μ„œ λ°©λ¬Έν•˜μ§€ μ•Šμ€ λ…Έλ₯΄λ₯Ό λͺ¨λ‘ 큐에 μ‚½μž…ν•˜κ³  λ°©λ¬Έ 처리λ₯Ό ν•œλ‹€.
  3. 2번의 과정을 더 이상 μˆ˜ν–‰ν•  수 없을 λ•ŒκΉŒμ§€ λ°˜λ³΅ν•œλ‹€.
from collections import deque


def bfs(graph, start, visited):
  queue = deque([start])
  visited[start] = True
  while queue:
    v = queue.popleft()
    print(v, end=' ')
    for i in graph[v]:
      if not visited[i]:
        queue.append(i)
        visited[i] = True


graph = [
  [],
  [2, 3, 8],
  [1, 7],
  [1, 4, 5],
  [3, 5],
  [3, 4],
  [7],
  [2, 6, 8],
  [1, 7]
]

visited = [False] * 9

bfs(graph, 1, visited)

πŸ’― DFS/BFS ν•œλˆˆμ— 보기

DFSBFS
λ™μž‘ μ›λ¦¬μŠ€νƒν
κ΅¬ν˜„ λ°©λ²•μž¬κ·€ ν•¨μˆ˜ 이용큐 자료ꡬ쑰 이용
profile
μ΄μ‚¬μ€‘μž…λ‹ˆλ‹€!🌟https://velog.io/@devkyoung2

0개의 λŒ“κΈ€