인접한 모든 정점들을 방문한 뒤, 더 이상 방문할 정점이 없으면 depth를 내려가고, 다시 인접한 모든 정점들을 방문한다.
Queue 사용
최단 경로 구할 때 사용
재귀적으로 동작하지 않는다.
장점: 최단 경로를 찾을 수 있다. 답이 되는 경로가 여러 개라도 최단 경로임을 보장한다.
단점
장점
단점: 찾은 경로가 최적이 아닐 가능성이 높다. 최악의 경우에는 모든 경로를 탐색해야지 답을 찾을 수도 있고 이는 가장 오랜 시간이 걸린다.
노드가 N개, 간선이 E개일 때,
인접 리스트: O(N+E)
인접 행렬: O(N²)
행렬은 NxN의 matrix를 돌아야 하기 때문에 O(N²)이다.
리스트는 모든 정점과 모든 간선을 다 거쳤기 때문에 O(N+E)라고 할 수 있다.
모든 정점을 방문 -> BFS/DFS 둘 다 사용 가능
최단 거리 구하기 -> BFS
DFS로 찾은 첫 번째 경로는 최단 거리가 아닐 수 있기 때문에 BFS를 사용한다.
그래프가 굉장히 크다면(그래프가 깊다면)? -> DFS 사용
그래프의 규모가 작고(노드의 수가 적고), depth가 얕다면? -> BFS 사용
이동할 때마다 가중치가 붙어서 이동한다거나 이동 과정에서 여러 제약이 있을 경우 -> DFS 사용