장점
단점
전제 조건
1. 1번 정점을 root 노드로 하여 1번부터 탐색을 시작한다.
2. 번호가 작은 정점부터 탐색한다.
DFS 중요 코드
public class dfs {
static int edge; // 간선의 수
static int vertex; // 정점의 수
static int[][] map; // 정점 간의 연결 정보를 담는 객체
static boolean[] visit; // 정점을 방문했는지 체크하기 위한 객체
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
vertex = sc.nextInt();
edge = sc.nextInt();
map = new int[vertex + 1][vertex + 1];
visit = new boolean[vertex + 1];
for (int i = 0; i < edge; i++) {
int start = sc.nextInt();
int next = sc.nextInt();
// 여기가 중요!!! 정점 연관관계 저장
map[start][next] = 1;
map[next][start] = 1;
}
dfs(1);
}
public static void dfs(int start) {
visit[start] = true;
System.out.println(start + " ");
for (int i = 1; i < vertex; i++) {
if(!visit[i] && map[start][i] == 1)
dfs(i);
}
}
}
public class dfs {
static ArrayList<Integer>[] arrayList; // 정점 간의 관계를 담는 객체
static boolean[] visit; // 정점을 방문했는 지 확인하는 객체
ArrayList<Integer> dfsList = new ArrayList<>(); // 출력용 객체
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int vertex = sc.nextInt();
int line = sc.nextInt();
int startVertex = sc.nextInt();
arrayList = new ArrayList[vertex + 1];
visit = new boolean[vertex + 1];
for (int i = 0; i < arrayList.length; i++) {
arrayList[i] = new ArrayList<>();
}
for (int i = 0; i < line; i++) {
int x = sc.nextInt();
int y = sc.nextInt();
// 여기가 중요!!! 정점 연관관계 저장
arrayList[x].add(y);
arrayList[y].add(x);
}
// 작은 수 부터 방문하도록 정렬
for (int i = 1; i < vertex + 1; i++) {
Collections.sort(arrayList[i]);
}
dfs(startVertex);
for (Integer integer : dfsList) {
System.out.print(integer + " ");
}
}
public static void dfs(int x){
if(visit[x])
return;
visit[x] = true;
dfsList.add(x);
for (int y : arrayList[x]) {
if(!visit[y])
dfs(y);
}
}
}
Pixabay로부터 입수된 mohamed Hassan님의 이미지 입니다.