CS

DFS

데브킹덕 2023. 12. 13. 18:03

깊이 우선 탐색(DFS)

Depth-First Search

탐색하려는 노드의 자식 노드부터 우선 탐색하는 방식

 

한개의 큐와 한개의 스택으로 구현

방문해야하는 노드 저장 스택(LIFO)

이미 방문한 노드를 저장하는 큐 (FIFO)

 

1. 탐색 노드 큐에 스택에 담기

2. 스택에 마지막 값을 추출해 큐에 존재하는지 확인

3. 큐에 존재하면 존재하지 않는게 나올때까지 확인 후 큐에 추가

4. 큐에 추가된 값의 연결된 간선들 모두 스택에 추가

* 스택이 빌때까지 2번부터 반복

 

 

func DFS(graph: [String: [String]], start: String) -> [String] {
    var queue: [String] = []
    var stack: [String] = [start]
    
    while !stack.isEmpty {
        let node: String = stack.removeLast()
        if queue.contains(node) { continue }
        
        queue.append(node)
       stack += graph[node] ?? []
    }
    
    return queue
}

'CS' 카테고리의 다른 글

RSA 암호화  (0) 2024.11.05
IP / TCP / UDP / 패킷 / URL  (2) 2024.09.04
[CS] 런타임 vs 컴파일타임  (0) 2023.06.28
[Swift] 메모리구조 - 코드, 데이터, 힙, 스택 (Code,Data,Heap,Stack)  (1) 2022.09.20