Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- springboot
- 전화번호목록자바
- 프로그래머스JAVA
- 백준팩토리얼자바
- 백준
- 테스트클래스생성단축키
- 프로그래머스해쉬
- dfs
- 프로그래머스자바
- 알고리즘
- 인텔리제이단축키
- 백준피보나치수
- java
- 프로그래머스N으로표현
- 백준벌집
- 백준팩토리얼
- 백준하노이탑
- intelliJ단축키
- 카카오코딩연습
- 백준피보나치
- 프로그래머스완주하지못한선수
- 스프링부트와 AWS로혼자구현하는웹서비스
- 자바
- 프로그래머스전화번호목록
- 완전탐색
- 인텔리제이테스트클래스생성
- 코딩연습
- 알고리즘공부
- 프로그래머스
- C++
Archives
- Today
- Total
말랑말랑
DFS 알고리즘 공부 본문
BFS에 이어 DFS도 같이 공부했다.
재귀 쪽은 실무에서 많이 사용하진 않아서 엄~청 익숙한 방법은 아니지만? 구현하는게 어렵진 않았다.
애초에 BFS보다는 DFS가 개념이 쉽다. DFS를 먼저하고 BFS 보니 잠깐 띠용 했었음.
+ DFS는 재귀로 구현하는게 쉬운듯하다. 혹시 모르니 Stack을 사용해서도 구현해봐야겠다.
DFS(깊이 우선 탐색)
- BFS와 같이 그래프 이론이자 완전탐색 방법 중 하나이다.
- 깊이 우선 탐색으로 노드 하나를 정하고 연결되어 있는 노드가 없을 때까지 깊이 탐색한 후 다음 노드로 넘어간다.
- 시작 노드와 연결 된 노드들을 찾은 후, 그중 하나를 골라 연결된 노드가 없을때까지 그 줄기를 탐색한다.
- BFS가 가로로 쭉 쭉 탐색하는 느낌이였다면, DFS는 세로로 쭉 쭉 탐색한다.
- Stack과 구조를 사용하는 방식.
* 이론 공부는 youtu.be/CJiF-muKz30 을 참고했다. 설명을 쉽게 잘 해주신다.
메인 함수
int[][] graph = {
{},
{2, 3, 8},
{1, 7},
{1, 4, 5},
{3, 5},
{3, 4},
{7},
{2,6,8},
{1, 7}
};
boolean[] visited = new boolean[graph.length];
// 1. 재귀함수 방식 DFS
DFS(graph, visited, 1);
DFS 재귀 함수
// graph : 그래프 정보를 담고 있는 배열
// visited : 방문 정보를 담고 있는 배열로 그래프의 노드 수와 동일
// num : 방문하려는 노드의 번호
public static void DFS(int[][] graph, boolean[] visited, int num) {
if(visited[num] == true) // 이미 들렸으면 back
return;
visited[num] = true; // 1번 노드 들렸음
System.out.println(num);
if(graph[num].length > 0) {
for(int i=0 ; i<graph[num].length ; i++) {
DFS(graph, visited, graph[num][i]);
}
}
}
'알고리즘' 카테고리의 다른 글
BFS 알고리즘 공부 (0) | 2021.04.09 |
---|