DFS : 깊이 우선 탐색, 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘, 시간복잡도 O(n)
그래프 : 노드와 간선이루어짐
DFS의 동작 과정
def dfs(graph, v, visited):
visited[v] = True
print(v, end=' ')
for i in graph[v]:
if not visited[i]:
dfs(graph, i, visited)
graph = [
[],
[2, 3, 8],
[1, 7],
[4, 5],
[3, 5],
[3, 4],
[7],
[2, 6, 8],
[1, 7]
]
visited = [False] * 9
dfs(graph, 1, visited)
BFS : 너비 우선 탐색, 가까운 노드부터 탐색하는 알고리즘, 큐 자료구조를 이용함, O(n)
deque 라이브러리를 이용하는것이 좋으며, DFS보다 수행 시간이 빠르다.
BFS의 동작 과정
from collections import deque
def bfs(graph, start, visited):
visited[start] = True
queue = deque([start])
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],
[4, 5],
[3, 5],
[3, 4],
[7],
[2, 6, 8],
[1, 7]
]
visited = [False] * 9
bfs(graph, 1, visited)
1차원 배열이나 2차원 배열은 그래프 형태로 생각하면 수월하게 문제를 풀 수 있다. 게임 캐릭터의 상하좌우 이동 문제도 그래프 형태로 바꿔서 생각할 수 있다.