DFS
- Depth First Search 의 약자로 깊이 우선 탐색을 위한 알고리즘이다.
- 자기 자신을 호출하는 순환 알고리즘 형태를 지닌다. (stack, 재귀)
- 모든 노드를 방문하고자 할 때 쓰인다.
static void dfs(int x){
if(visited[x]) return;
visited[x] = true;
System.out.print(x+" ");
for (int i = 1; i < node.length; i++) {
if(node[x][i] == 1){
dfs(i);
}
}
}
BFS
- Bread First Search의 약자로 너비 우선 탐색을 위한 알고리즘이다.
- BFS는 DFS와 다르게 재귀를 사용하지 않고, 큐를 이용한 반복문을 사용한다. (선입선출 구조)
- 두 노드 사이에 최단경로를 찾을 때나, 모든 노드를 방문하고자 할 때 쓰인다.
- 속도는 DFS보다 빠르다.
static void bfs(int x){
Queue<Integer> qu = new LinkedList();
qu.offer(x);
visited[x] =true;
while(!qu.isEmpty()){
x = qu.poll();
System.out.print(x+" ");
for (int i = 1; i < node.length; i++) {
if(!visited[i] && node[x][i] == 1 ){
qu.offer(i);
visited[i] = true;
}
}
}
}