프로그래밍/알고리즘
기초 알고리즘 : BFS, DFS 구현
blu3fishez
2023. 7. 16. 14:16
DFS, BFS
DFS, BFS는 그래프를 순회하는 방법 중의 하나로, Depth First Search 와 Breadth First Search 의 줄임말이다. 당연히 말 그대로 깊이 우선 너비 우선 탐색이다.
알고리즘의 경우 구현이 생각보다 다양한데, dfs의 경우 visit 배열을 포함한 재귀, 스택으로 구현가능하고
bfs의 경우 분기 기반일 경우 단순 while 문을 활용할 수 있고, 그 외의 경우 queue 와 함께 while문 기반으로 검색가능하다.
DFS
#include<vector>
#define MAX_N 1000
const int N = MAX_N;
bool visit[N];
vector<int> graph[N];
void dfs(int where){
visit[where] = true; // 방문했을 경우 다시 탐색할 이유가 없다.
for (int t : graph[where]) {
if(!visit[t]) {
// 방문하지 않았고 순회할 수 있는 점이 있는 경우
dfs(t);
}
}
}
BFS
#include<vector>
#define MAX_N 1000
const int N = MAX_N;
bool visit[N];
vector<int> graph[N];
void bfs(int where) {
visit[where] = true; // where : 방문의 시작점
queue<int> q; q.insert(where);
while(!q.empty()) {
int x = q.front(); q.pop();
for(int t : graph[x]) {
if(!visit[t]) {
q.insert(t);
visit[t] = true; // queue에 중복삽입 방지
}
}
}
}