알고리즘 문제/이론
그래프 탐색 알고리즘 : DFS/BFS
가끔개발
2023. 5. 15. 16:55
- 탐색이란 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정
- 대표적인 그래프 탐색알고리즘 DFS, BFS 자주 등장
DFS(Depth-First Search)
- DFS는 깊이 우선 탐색이라고 부르며 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘입니다.
- DFS는 스택 자료구조(혹은 재귀 함수)를 이용하며, 구체적인 동작 과정은 다음과 같습니다.
- 탐색 시작노드를 스택에 삽입하고 방문 처리합니다.
- 스택의 최상단 노드에 방문하지 않은 노드가 하나라도 있다면 그 노드를 스택에 넣고 방문처리합니다. 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼냅니다,
- 더이상 위에 과정을 수행 할수 없을때까지 반복합니다.
import java.util.*; // 스택
public class Main {
public static void main(String[] args) {
Stack<Integer> s = new Stack<>();
// 삽입(5) - 삽입(2) - 삽입(3) - 삽입(7) - 삭제() - 삽입(1) - 삽입(4) - 삭제()
s.push(5);
s.push(2);
s.push(3);
s.push(7);
s.pop();
s.push(1);
s.push(4);
s.pop();
// 스택의 최상단 원소부터 출력
while (!s.empty()) {
System.out.println(s.peek());
s.pop();
}
}
}
import java.util.*;
public class Main { //재귀함수 조건
public static void recursiveFunction(int i) {
// 100번째 호출을 했을 때 종료되도록 종료 조건 명시
if (i == 100) return;
System.out.println(i + "번째 재귀 함수에서 " + (i + 1) + "번째 재귀함수를 호출합니다.");
recursiveFunction(i + 1);
System.out.println(i + "번째 재귀 함수를 종료합니다.");
}
public static void main(String[] args) {
recursiveFunction(1);
}
}
BFS(Breadth-First Search)
- BFS는 너비 우선 탐색이라고 부르며 그래프에서 가까운 노드부터 우선 탐색하는 알고리즘입니다.
- BFS는 큐 자료구조를 이용하며, 구체적인 동작 과정은 다음과 같습니다.
- 탐색 시작노드를 큐에 삽입하고 방문 처리합니다.
- 큐에서 노드를 꺼낸 뒤에 해당 노드의 인접 노드 중에서 방문하지 않은 노드를 모두 큐에 삽입히고 방문 처리합니다.
- 더이상 위에 과정을 수행 할수 없을때까지 반복합니다.
import java.util.*;
public class Main { // 큐
public static void main(String[] args) {
Queue<Integer> q = new LinkedList<>();
// 삽입(5) - 삽입(2) - 삽입(3) - 삽입(7) - 삭제() - 삽입(1) - 삽입(4) - 삭제()
q.offer(5);
q.offer(2);
q.offer(3);
q.offer(7);
q.poll();
q.offer(1);
q.offer(4);
q.poll();
// 먼저 들어온 원소부터 추출
while (!q.isEmpty()) {
System.out.println(q.poll());
}
}
}