반응형
BFS 알고리즘은 넓이 우선 탐색 알고리즘이며, DFS 알고리즘은 깊이 우선 탐색 알고리즘이다.
<템플릿>
public static void bfs(int start) {
Queue<Integer> q = new LinkedList<>();
q.offer(start);
// 현재 노드를 방문 처리
visited[start] = true;
// 큐가 빌 때까지 반복
while(!q.isEmpty()) {
// 큐에서 하나의 원소를 뽑아 출력
int x = q.poll();
// 해당 원소와 연결된, 아직 방문하지 않은 원소들을 큐에 삽입
for(int i = 0; i < graph.get(x).size(); i++) {
int y = graph.get(x).get(i);
// if 제어문의 반복
// if(visited[y]) continue;
q.offer(y);
visited[y] = true;
}
}
}
public static void dfs(int x) {
// 현재 노드를 방문 처리
visited[x] = true;
System.out.print(x + " ");
// 현재 노드와 연결된 다른 노드를 재귀적으로 방문
for (int i = 0; i < graph.get(x).size(); i++) {
int y = graph.get(x).get(i);
if (!visited[y]) dfs(y);
}
}
반응형
'알고리즘 > 개념' 카테고리의 다른 글
[알고리즘] Segment Tree (0) | 2022.08.29 |
---|---|
[알고리즘] 투 포인터 알고리즘 (Two Pointer) (0) | 2022.06.29 |
[알고리즘] LCA (Lowest Common Ancestor) (0) | 2022.05.04 |
[알고리즘] DP (Dynamic Programming) (0) | 2021.05.10 |