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 | 31 |
Tags
- ES6
- 탐욕기법
- node.js
- 되추적
- 백준
- 인터럽트
- 운영체제
- access control
- 스프링부트
- rest docs
- 백트래킹
- 병행제어
- AWS
- 컴퓨터 보안
- DB
- 자바스크립트
- 데이터베이스
- 보안
- API문서
- IT
- 컴퓨터보안
- S3
- 알고리즘
- 노드
- NEST
- DATABASE
- node
- OS
- 컴퓨터
- 디비
Archives
- Today
- Total
개발스토리
DFS(깊이 우선 탐색) 본문
그래프 탐색
■ 하나의 정점으로부터 시작해서 차례대로 모든 정점들을 한 번씩 방문하는 탐색 과정
EX) 특정 도시에서 다른 도시로 갈 수 있는 지 없는 지에 대한 탐색 과정
DFS(깊이 우선 탐색)
■ root node나 다른 임의의 노드에서 시작하여 다음 branch로 넘어가기 전에 해당 branch를 완벽하게 탐색하는 방법
■ 넓게 탐색하기전에 깊게 탐색하는 것
■ DFS가 BFS보다 좀 더 간단함
DFS(깊이 우선 탐색)의 특징
■ 전위 순회를 포함한 다른 형태의 트리 순회는 모두 DFS의 한 종류이다.
■ 그래프 탐색의 경우 어떤 노드를 방문했었는 지 여부를 반드시 검사해야 한다.
■ DFS는 스택 자료구조(혹은 재귀함수)를 이용하며, 구체적인 동작 과정은 다음과 같다.
1. 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다.
2. 스택의 최상단 노드에 방문하지 않은 인접한 노드가 하나라도 있으면 그 노드를 스택에 넣고 방문 처리를 한다.
방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다.
3. 더 이상 2번의 과정을 수행할 수 없을 때까지 반복한다.
# DFS 메서드 정의
def dfs(graph, v ,visited):
# 현재 노드를 방문 처리
visited[v] = True
print(v, end=' ')
# 현재 노드와 연결된 다른 노드를 재귀적으로 방문
for i in graph[v]:
if not visited[i]:
dfs(graph, i, visited)
# 각 노드가 연결된 정보를 표현(2차원 리스트)
graph = [
[],
[2, 3, 8],
[1, 7],
[1, 4, 5],
[3, 5],
[3, 4],
[7],
[2, 6, 8],
[1, 7]
]
# 각 노드가 방문된 정보를 표현 초기에는 false로 초기화
visited = [False] * 9
# 정의된 DFS 함수 호출
dfs(graph, 1, visited)
# 결과 1 2 7 6 8 3 4 5
'알고리즘' 카테고리의 다른 글
백준 2869)달팽이는 올라가고 싶다 (0) | 2021.01.08 |
---|---|
백준 10809)알파벳 찾기 (0) | 2020.12.28 |
크루스칼 / 다익스트라 알고리즘 (0) | 2020.11.20 |
최소 비용 신장 트리 정의와 프림 알고리즘 (0) | 2020.11.20 |
Backtracking_동전 던지기 (0) | 2020.11.12 |
Comments