이미지 출처 https://developer-mac.tistory.com/64
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);
}
}
이미지 출처 https://developer-mac.tistory.com/64
1. 탐색 시작 노드를 큐에 삽입한 후 방문 처리
2. 큐에서 노드를 꺼내 해당 노드의 인접 노드 중 미방문 노드를 모두 큐에 삽입 후 방문 처리
3. 2번의 과정을 반복
void bfs(int start) {
Queue<Integer> q = new LinkedList<>();
// 1. 시작 노드를 큐에 삽입한 후 방문 처리
q.offer(start);
visited[start] = true;
// 3. 2번의 과정을 반복
while(!q.isEmpty()) {
// 2. 큐에서 하나의 원소를 꺼냄
int x = q.poll();
System.out.print(x + " ");
// 2. 해당 원소와 연결된, 아직 방문하지 않은 원소들을 큐에 삽입
for(int i = 0; i < graph.get(x).size(); i++) {
int y = graph.get(x).get(i);
if(!visited[y]) {
q.offer(y);
visited[y] = true;
}
}
}
}