Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- Sort
- 백준
- map
- 이분탐색
- stoi
- 우선순위큐
- DP
- 깊이우선탐색
- Set
- 오블완
- C++
- BFS
- 백트래킹
- 분할정복
- 다이나믹프로그래밍
- priority_queue
- N과M
- 문자열
- int
- 그래프
- 정렬
- DFS
- 에라토스테네스의 체
- 배열
- 프로그래머스
- 알고리즘
- vector
- 유클리드호제법
- 최소공배수
- 티스토리챌린지
Archives
- Today
- Total
안녕 세상아,
[c++/알고리즘] DFS 개념 및 예제 본문
DFS (깊이 우선 탐색)
- 개념:
- DFS는 시작 노드에서 최대한 멀리 있는 노드까지 먼저 탐색하는 방식입니다.
- 보통 재귀나 스택 (Stack) 자료 구조를 사용해 탐색하며, 모든 경로 탐색이나 연결 요소 찾기에 유용합니다.
- 동작 원리:
- 시작 노드 방문: 시작 노드를 방문하고, 인접한 노드를 재귀적으로 방문합니다.
- 재귀로 탐색 진행: 방문하지 않은 인접 노드를 탐색하고, 각 노드에서 더 이상 방문할 노드가 없을 때까지 재귀 호출을 반복합니다.
- 재귀 호출 종료: 모든 경로를 다 탐색한 후 재귀 호출이 종료되며 상위 노드로 돌아갑니다.
- DFS 알고리즘의 특징:
- 깊이 우선 탐색을 수행하여 특정 경로가 존재하는지 확인할 수 있습니다.
- 재귀 호출의 특성을 이용해 백트래킹 문제에서 유용하게 쓰입니다.
- 보통 노드의 모든 연결 경로를 탐색하기에 적합합니다.
<DFS 템플릿>
#include <iostream>
#include <vector>
using namespace std;
vector<int> graph[9];
bool isVisited[9] = { false };
void dfs(int x) {
isVisited[x] = true;
cout << x << " ";
for (int i = 0; i < graph[x].size(); i++) {
int y = graph[x][i];
if (!isVisited[y])
dfs(y);
}
}
int main() {
// 노드 1에 연결된 노드 정보 저장
graph[1].push_back(2);
graph[1].push_back(3);
graph[1].push_back(8);
// 노드 2에 연결된 노드 정보 저장
graph[2].push_back(1);
graph[2].push_back(7);
// 노드 3에 연결된 노드 정보 저장
graph[3].push_back(1);
graph[3].push_back(4);
graph[3].push_back(5);
// 노드 4에 연결된 노드 정보 저장
graph[4].push_back(3);
graph[4].push_back(5);
// 노드 5에 연결된 노드 정보 저장
graph[5].push_back(3);
graph[5].push_back(4);
// 노드 6에 연결된 노드 정보 저장
graph[6].push_back(7);
// 노드 7에 연결된 노드 정보 저장
graph[7].push_back(2);
graph[7].push_back(6);
graph[7].push_back(8);
// 노드 8에 연결된 노드 정보 저장
graph[8].push_back(1);
graph[8].push_back(7);
dfs(1);
}
'c++ 개념' 카테고리의 다른 글
[c++] 참조자( & ) (0) | 2024.12.30 |
---|---|
[c++/STL] 교집합, 합집합 구하기 (1) | 2024.12.16 |
[c++/알고리즘] BFS 개념 및 예제 (0) | 2024.11.12 |
[c++/알고리즘] next_permutation (순열) (1) | 2024.10.22 |
[c++/알고리즘] transform 사용법 (0) | 2024.10.17 |