티스토리 뷰
안녕하세요 감자코딩에 감자개발자입니다.
이번에는 살펴볼 알고리즘 개념은 바로 "DFS(Depth First Search)" 입니다.
* DFS(Depth First Search) 알고리즘
1. 깊이우선탐색이란 트리 및 그래프 등을 탐색하는 알고리즘이다.
2. 특정 노드를 출발하여 깊게 들어 갈 수 있을때 까지 들어가고 들어 갈 곳이 없다면 다시 나오는 알고리즘이다.
3. 깊게 들어간다해서 깊이 우선 탐색, 스택을 이용하여 구현한다.(재귀를 많이 사용함)
* DFS탐색순서
DFS의 탐색순서를 보면 깊이 순서에따라서 방문하는 것이 달라지는것을 볼 수 있습니다.
그림에서 주어진 순서대로 탐색을 하게 되는것을 알고 계시면 될것같습니다.
* DFS 알고리즘 구현 로직
// dfs call
void dfs(int num)
{
printf("%d ", num); // 값 출력
for (int i = 1; i <= n; i++) { // n 모든정점의 개수
// graph 갈수있고, 방문하지 않은경우
if (graph[num][i] && visit[i] == 0) {
visit[i] = 1;
dfs(i); // recursive call
}
}
}
DFS 대표적인 구현은 = 재귀적 함수 호출(Recursive Call)
계속해서 자기자신을 호출하면서, 재귀호출을 통한 Return값을 얻게되는 로직입니다.
모든 정점을 하나씩 탐색하여 연결된 간선이고, 아직 체크되어있지않은 정점일 경우에 체크 visit = 1 그리고, 다시 재귀호출을 통하여 값을 얻게됩니다.
이에따라, 기본적인 DFS 개념 및 로직을 살펴보았습니다.
감사합니다.
'Algorithm' 카테고리의 다른 글
[알고리즘] 백준알고리즘 2667 단지번호 붙이기 DFS (0) | 2018.08.11 |
---|---|
[알고리즘] 백준알고리즘 1260 DFS와 BFS (0) | 2018.08.07 |
[알고리즘] 재귀적 함수의 호출(Recursive Call) (0) | 2018.08.06 |
[알고리즘] 백준알고리즘 7576 토마토 익히기 BFS (0) | 2018.07.30 |
[알고리즘] 백준알고리즘 1697 숨바꼭질 BFS (0) | 2018.07.30 |
- Total
- Today
- Yesterday
- Algorigm
- 감자개발자
- 노드
- 스프링
- 백준알고리즘
- Android
- C langauge
- node.js
- BFS
- node
- 안드로이드
- 개발하는 관광이
- Spring
- 코드엔진
- 백준
- Controller
- TensorFlow
- db
- MVC
- 리버싱
- 알고리즘
- 복습
- 감자코딩
- 텐서플로우
- 학교
- programming
- 초보자를 위한 C언어 300제
- 머신러닝
- 프로그래밍
- C언어
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |