들어가기 전 용어 정의
- 탐색 : 첫 방문 이후 실제 탐색이 이뤄짐
- 방문 : 첫 방문이 이뤄짐
짧게 요약: 방문 할 수 있는 정점 여러 개 일 때 정점 번호 작은 것 먼저 방문 하고 싶다면.
- dfs (with 재귀)
- 인자에 있는 노드에 대해 방문 여부 true로 찍고 동시에 출력하기 (방문과 탐색 동시에)
- 인접 노드들을 인자에 넣어 재귀 (작은 수부터 함수 호출하기 → 작은 수 먼저 방문)
- dfs (with 스택)
- 스택에서 빼온 노드에 대해 출력하기 (탐색은 나중에 함)
- 인접 노드들의 방문 여부 true로 찍기 (방문을 먼저함)
- 인접 노드들을 스택에 넣고 반복 (큰 수부터 스택에 넣기 -> 작은 수 먼저 나와 방문)
- bfs (with 큐)
- 큐에서 빼온 노드에 대해 출력하기 (탐색은 나중에 함)
- 인접 노드들의 방문 여부 true로 찍기 (방문을 먼저함)
- 인접 노드들을 큐에 넣고 반복 (작은 수부터 큐에 넣기 -> 작은 수 먼저 나와 방문)
DFS (깊이 우선 탐색)
- 정의) 그래프의 시작 노드에서 출발하여 탐색할 한 쪽 분기를 정하여 최대 깊이까지 탐색을 마친 후 다른 쪽 분기로 이동하여 다시 탐색을 수행하는 알고리즘
- 특징)
- 그래프 완전 탐색 기법 중 하나
- DFS 탐색 방식은 후입 선출(LIFO) 특성을 가짐
- 주로 재귀 함수나 스택 자료 구조를 이용해 구현함
- 재귀 사용 시 스택 오버 플로우 유의 필요함
- 시간복잡도 : O(V + E) → 노드 수 : V, 에지 수 : E
- 한 번 방문한 정점은 다시 방문하지 않으며, 한 정점에서 다음으로 방문할 노드들을 순회하는 횟수가 그 정점의 차수와 같기 때문
- DFS 를 응용해 단절점 찾기, 단절선 찾기, 사이클 찾기, 위상 정렬 등의 문제를 해결 가능함
- 과정) 스택 이용
- DFS 를 시작할 노드를 정한 후 사용할 자료구조 초기화하기
- 그래프를 인접 리스트로 표현하기
- 스택 자료구조에 시작 노드 더하기
- 노드 방문 여부 체크할 배열 초기화 → 시작 노드는 방문 여부 true로 체크하기 (T, F, F, F…)
- 스택에서 노드를 꺼내고, 꺼낸 노드의 인접 노드 중 방문 안 한 노드를 스택에 삽입하기
- pop 수행해 꺼낸 노드를 탐색 순서에 기입하기
- 꺼낸 노드의 인접 노드들을 스택에 삽입하기
- 이미 방문한 노드는 방문 배열을 바탕으로 재삽입 하지 않음
- 스택에 삽입한 노드들의 방문 여부 true로 체크하기
- 2번을 스택에 값이 없을 때까지 반복하기
- 예시) 스택 이용


- 코드) 스택, 재귀 이용
BFS (너비 우선 탐색)
- 정의) 시작 노드에서 출발해 시작 노드를 기준으로 가장 가까운 노드를 방문하면서 탐색하는 알고리즘
- 특징)
- 그래프 완전 탐색 기법 중 하나
- BFS 탐색 방식은 선입 선출(FIFO) 특성을 가짐
- 주로 큐 자료 구조를 이용해 구현함
- 시간복잡도 : O(V + E) → 노드 수 : V, 에지 수 : E
- 목표 노드에 도달하는 경로가 여러 개일 때 최단 경로를 보장함
- 탐색 시작 노드와 가까운 노드를 우선하여 탐색하기 때문임
- 단순히 방문에서 끝나는 게 아니라, 시작 노드와의 거리를 전부 계산할 수 있음
- 현재 보는 칸으로부터 추가되는 인접한 칸은 현재 보는 칸보다 1만큼 더 떨어져 있기 때문임
- 과정)
- BFS 를 시작할 노드를 정한 후 사용할 자료구조 초기화하기
- 그래프를 인접 리스트로 표현하기
- 큐 자료구조에 시작 노드 더하기
- 노드 방문 여부 체크할 배열 초기화 → 시작 노드는 방문 여부 true로 체크하기 (T, F, F, F…)
- 큐에서 노드를 꺼내고, 꺼낸 노드의 인접 노드 중 방문 안 한 노드를 큐에 삽입하기
- poll 수행해 꺼낸 노드를 탐색 순서에 기입하기
- 꺼낸 노드의 인접 노드들을 큐에 삽입하기
- 이미 방문한 노드는 방문 배열을 바탕으로 재삽입 하지 않음
- 큐에 삽입한 노드들의 방문 여부 true로 체크하기
- 2번을 큐에 값이 없을 때까지 반복하기
- 예시)


- 코드)
참고
- DO IT
- ICPC 신촌
- 바킹독
- Ries 마법의 슈퍼마리오



![[3회차] Bruteforcing, Backtracking](https://www.notion.so/image/https%3A%2F%2Fi.ytimg.com%2Fvi%2F4cCieobzB2w%2Fmaxresdefault.jpg?table=block&id=d29cfc08-7b32-4811-85ca-a223026c9383&cache=v2)

