Algorithm
DFS(깊이 우선탐색)
곰제비
2022. 6. 24. 00:11
깊이 우선탐색이란?
- 그래프를 탐색할 때 쓰이는 알고리즘
- 특정한 노드에서 가장 멀리 있는 노드를 먼저 탐색하는 알고리즘
- 주어진 맵전체를 탐색하며 한번 방문한 노드는 다시 방문하지 않는다.
// 수도코드
DFS(G, u)
u.visited = true
for each v ∈ G.Adj[u]
if v.visited == false
DFS(G,v)
- 어떠한 정점 u의 visited를 참으로 바꾸고 u로부터 연결되어 있는 v지점을 탐색한다.
- 방문되어 있지 않은 노드에 대해 재귀적으로 DFS를 호출.
1번 노드에서 시작하여 4번노드까지 가장 멀리 떨어져있는 정점까지 방문한 다음 그 다음 정점들을 차례로 방문한다.
DFS 구현방법 - 1
void dfs(int here){
visited[here] = 1;
for(int there : adj[here]){
if(visited[there]) continue;
dfs(there);
}
}
- 방문했다면(visited[there])라면 방문하지 않고 방문 안했다면 방문한다.
- 해당 there에 대해서 dfs를 호출하는 방법
DFS 구현방법 - 2
void dfs(int here){
if(visited[here]) return;
visited[here] = 1;
for(int there : adj[here]){
dfs(there);
}
}
- 방문 여부에 상관없이 일단 DFS를 호출한다.
- 해당 함수에서 방문했다면 return을 통해 함수를 종료한다.