반응형
[알고리즘][DFS] DFS 개념
- 그래프 탐색의 종류
- DFS (DepthFirstSearch) ; 스택
- BFS (BreadthFirstSearch) ; 큐
- 그래프 탐색의 목적
- 모든 정점을 1번씩 방문
- 깊이우선탐색 (DFS)
- 스택을 이용해 갈 수 있는 만큼 최대한 많이 간다.
- 갈 수 없을 경우, 스택에서 빼고 이전으로 돌아간다.
[코드]
재귀를 이용한 DFS 탐색 코드
- 인접 행렬을 이용한 코드 구현
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | int n = scan.nextInt(); //접점의 수 int m = scan.nextInt(); //간선의 수 int[][] array = new int[n][m]; boolean[] check = new boolean[n]; public void DFS1(int x) { check[x] = true; for(int i=0;i<=n;i++) { if(array[x][i]==1 && check[i]==false) { check[i] = true; DFS1(i); } } } | cs |
- 인접 리스트를 이용한 코드 구현
1 2 3 4 5 6 7 8 9 10 11 12 13 | ArrayList<ArrayList<Integer>> a = new ArrayList<>(); //스택 boolean[] check = new boolean[n]; public void DFS2(int x) { check[x] = true; for(int i=0;i<a.get(x).size();i++) { int y = a.get(x).get(i); if(check[y]==false) { DFS2(y); } } } | cs |
반응형
'CS > Algorithm' 카테고리의 다른 글
[알고리즘] 시간복잡도 (Time Complexity) (0) | 2018.03.30 |
---|---|
[알고리즘][BFS] BFS 기본 개념 (0) | 2018.03.27 |
[알고리즘][DP][2913] 이친수 (0) | 2018.03.26 |
[알고리즘][GCD] 재귀를 이용한 유클리드 호제법 (0) | 2018.03.25 |
[알고리즘][DP][1912] 연속합 (0) | 2018.03.25 |
댓글