728x90
DFS 깊이 우선 탐색
- 한 노드의 자식을 타고 끝까지 순회한 후, 다시 돌아와서 다른 Node들의 자식을 타고 내려가며 순회함
- DFS 방식 : A -> B -> D -> E -> F ->C -> G -> H -> I -> J
구현 코드
# 그래프 생성하기
graph = dict()
graph['A'] = ["B", "C"]
graph['B'] = ["A", "D"]
graph['C'] = ["A", "G", "H", "I"]
graph['D'] = ["B", "E", "F"]
graph["E"] = ["D"]
graph["F"] = ["D"]
graph["G"] = ["C"]
graph["H"] = ["C"]
graph["I"] = ["C", "J"]
graph["J"] = ["I"]
def bfs(graph, start_node):
visited = list()
need_visit = list()
need_visit.append(start_node)
while need_visit:
node = need_visit.pop(0)
if node not in visited:
visited.append(node)
need_visit.extend(graph[node])
return visited
bfs(graph, 'A')
['A', 'B', 'C', 'D', 'G', 'H', 'I', 'E', 'F', 'J']
시간복잡도
노드수와 간선의 수로 결정됨
- 노드 수: V
- 간선 수: E
- while에서 V+E 만큼 수행됨
- \( O(V+E) \)
728x90
'자료구조&알고리즘' 카테고리의 다른 글
[알고리즘] 최단 경로 - 다익스트라 (0) | 2022.11.21 |
---|---|
[알고리즘] 탐욕 알고리즘 Greedy (0) | 2022.11.12 |
[알고리즘] 너비 우선 탐색 BFS Breadth First Search (0) | 2022.11.05 |
[알고리즘] 그래프 Graph (0) | 2022.11.04 |
[알고리즘] 병합 정렬 merge sort (0) | 2022.10.28 |