미로를 탐색할 때 한 방향으로 갈 수 있을 때까지 계속 가다가 더 이상 갈 수 없게 되면 다시 가장 가까운 갈림길로 돌아와서 이곳으로부터 다른 방향으로 다시 탐색을 진행하는 방법과 유사함
즉 넓게(wide) 탐색하기 전에 깊게(deep) 탐색함
모든 노드를 방문하고자 하는 경우에 이 방법을 선택함
깊이 우선 탐색(DFS)이 너비 우선 탐색(BFS)보다 좀 더 간단함
검색 속도 자체는 너비 우선 탐색(BFS)에 비해서 느림
**※ 깊이 우선 탐색(DFS)의 시간 복잡도**
- DFS는 그래프(정점의 수 : N, 간선의 수: E)의 모든 간선을 조회함
- 인접 리스트로 표현된 그래프 : O(N+E)
- 인접 행렬로 표현된 그래프 : O(N^2)
-
**※ 깊이 우선 탐색(DFS)의 시간 복잡도**
- DFS는 그래프(정점의 수 : N, 간선의 수: E)의 모든 간선을 조회함
- 인접 리스트로 표현된 그래프 : O(N+E)
- 인접 행렬로 표현된 그래프 : O(N^2)
인접 행렬
인접 리스트
벡터로 구현하는게 편함
만약 가중치가 있다면 pair<int,int> adj[]로 구현 가능 first에 노드번호, second에 가중치
단점은 노드[i]와 노드[j]가 이어져있는지 확인하려면 for문을 돌아야함 대신 순회에서는 개이득
루트 노드(혹은 다른 임의의 노드)에서 시작해서 인접한 노드를 먼저 탐색하는 방법
시작 정점으로부터 가까운 정점을 먼저 방문하고 멀리 떨어져 있는 정점을 나중에 방문하는 순회 방법
즉 깊게(deep) 탐색하기 전에 넓게(wide) 탐색하는 것
두 노드 사이의 최단 경로 혹은 임의의 경로를 찾고 싶을 때 이 방법을 선택함
ex) 지구 상에 존재하는 모든 친구 관계를 그래프로 표현한 후 Ash 와 Vanessa 사이에 존재하는 경로를 찾는 경우
※ 너비 우선 탐색(BFS)의 특징
※ 너비 우선 탐색(BFS)이 과정