DFS vs BFS
너비 우선 탐색이란?( Breadth First Search)
루트 노드에서 탐색을 시작하여 같은 레벨에 있는 노드를 모두 탐색한 다음 하위 레벨로 내려가 또 모두 탐색을 진행하다가, 더이상 탐색할 노드가 없을 때 탐색을 멈추는 방식.
BFS는 일반적으로 큐를 이용하여 구현한다.
자바 구현
class Graph {
private int V;
private LinkedList<Integer> adj[]; // 링크드리스트의 배열
// constructor
Graph (int v) {
V = v;
adj = new LinkedList[v];
// v개의 LinkedList 선언 및 생성
for (int i = 0; i < v; ++i) {
adj[i] = new LinkedList();
}
}
void addEdge (int v, int w) { // v번째 LinkedList 에 w를 삽입
adj[v].add(w);
}
// BFS 함수
void BFS(int s) {
boolean visited[] = new boolean[V]; // 각 노드이 방문 여부를 저장하기 위해
LinkedList<Integer> queue = new LinkedList<Integer>();
visited[s] = true;
queue.add(s);
while (queue.size() != 0) {
// 방문한 노드를 큐에서 추출하고 값을 출력
s = queue.poll();
System.out.println(s + " ");
// 방문한 노드와 인접한 모든 노드를 가져온다.
Itertor<Integer> i = adj[s].listIterator();
while (i.hasNext()) {
int n = i.next();
// 방문하지 않은 노드면 방문한 것으로 표시하고 큐에 삽입
if (!visited[n]) {
visited[n] = true;
queue.add();
}
}
}
}
}
DFS, BFS를 활용하면 좋은 상황
[ 알고리즘 ] 선택 정렬 (Selection Sort) (0) | 2024.04.09 |
---|---|
[ 알고리즘 ] 이분=이진 탐색 ( Binary Search ) (0) | 2024.04.08 |
[ 알고리즘 ] 버블정렬 (Bubble Sort) (0) | 2024.03.23 |
[ 알고리즘 ] 깊이 우선 탐색 (DFS) (0) | 2024.03.20 |
[ 알고리즘 ] 퀵 정렬 (Quick Sort) (1) | 2024.03.18 |