DFS (깊이 우선 탐색)
다음 노드로 넘어가기전에 해당 분기를 완벽하게 탐색하는 방식
BFS (너비 우선 탐색)
시작 노드에서부터 가까운 노드부터 먼저 탐색하는 방식
스택을 이용한 DFS(깊이 우선 탐색) 구현
// DFS
boolean [] visited = new boolean[edges.length];
Stack<Integer> stack = new Stack<Integer>();
stack.push(0); // 탐색을 시작할 노드 스택에 추가
while (!stack.isEmpty()) {
int vertex = stack.pop();
if (!visited[vertex]) {
visited[vertex] = true;
System.out.println(vertex);
}
// 스택에 넣은 노드가 나중에 탐색. 역순으로 추가해야 작은 인덱스 노드가 먼저 탐색
for (int i = edges[vertex].length - 1; i >= 0; i--) {
if (edges[vertex][i] == 1 && !visited[i]) {
stack.push(i);
}
}
}
visited : 노드의 방문 여부
큐를 이용한 BFS(너비 우선 탐색) 구현
// BFS
Queue<Integer> queue = new LinkedList<>();
boolean[] visited2 = new boolean[edges.length];
queue.add(0); // 탐색 시작 노드 0 큐에 삽입
visited2[0] = true;
while (!queue.isEmpty()) {
int vertex = queue.poll();
System.out.print(vertex + " - ");
for (int i = 0; i < edges[vertex].length; i++) {
if (edges[vertex][i] == 1 && !visited2[i]) {
queue.add(i);
visited2[i] = true;
}
}
}
visited2 : 노드의 방문 여부
'한화시스템 Beyond SW Camp > 자료구조 알고리즘' 카테고리의 다른 글
[알고리즘] 다익스트라(Dijkstra) (0) | 2025.01.26 |
---|---|
[자료구조] Trie 구현 (0) | 2025.01.20 |
[자료구조] 레드-블랙 트리 (Red-Black Tree) 코드 구현 (0) | 2025.01.20 |
[자료구조] AVL 트리 이론, 구현 (0) | 2025.01.20 |
[자료구조] 이진 탐색 트리(Binary Search Tree) 구현 (0) | 2025.01.19 |