🪴 Hayul's digital garden

Search

Search IconIcon to open search

DFS, BFS

Last updated Nov 17, 2022 Edit Source

Note

DFS와 BFS는 대표적인 그래프 탐색 알고리즘이다.

# 깊이 우선 탐색(DFS)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#각 노드가 연결된 정보를 표현(2차원 리스트)
graph = [
		 [],      #편의를 위해 하나 더 큰 크기로 만든다. 
		 [2,3,8], #첫번째 노드와 연결된 노드들 정보
		 [1,7],
		 [1,4,5],
		 [3,5],
		 [3,4],
		 [7],
		 [2,6,8],
		 [1,7]
]

#각 노드가 방문된 정보를 표현(1차원 리스트)
visited = [False] * 9

#DFS 메서드 정의
def dfs(graph, v, visited):
	
	#현재 노드를 방문 처리
	visited[v] = True
	
	#현재 노드와 연결된 다른 노드를 재귀적으로 방문
	for i in graph[v]:
		if not visited[i]:
			dfs(graph, i, visited)

#정의된 DFS 함수 호출
dfs(graph, 1, visited)

# 너비 우선 탐색(BFS)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
from collections import deque

#각 노드가 연결된 정보를 표현(2차원 리스트)
graph = [
		 [],      #편의를 위해 하나 더 큰 크기로 만든다. 
		 [2,3,8], #첫번째 노드와 연결된 노드들 정보
		 [1,7],
		 [1,4,5],
		 [3,5],
		 [3,4],
		 [7],
		 [2,6,8],
		 [1,7]
]

#각 노드가 방문된 정보를 표현(1차원 리스트)
visited = [False] * 9

def bfs(graph, start, visited):
	queue = deque([start])
	
	#현재 노드를 방문처리
	visited[start] = True

	#큐가 빌 때까지 반복
	while queue:
		
		#큐에서 하나의 원소를 뽑아내기
		v = queue.popleft()
		
		#아직 방문하지 않은 인접한 원소들을 큐에 삽입
		for i in graph[v]:
			if not visited[i]:
				queue.append(i)
				visited[i] = True

bfs(graph, 1, visited)