美文网首页
深度优先搜索DFS—Swift代码模板

深度优先搜索DFS—Swift代码模板

作者: Jabir_Zhang | 来源:发表于2022-05-18 11:13 被阅读0次

    Swift

    // 深度优先搜索
    class DFS {
        // 递归版本
        var visited = [Int :Int]()
        func dfs(_ root: Node?) {
            // terminator 终结条件
            guard let _root = root else { return }
            if visited.keys.contains(_root.val) {
                // already visited
                return
            }
            visited[_root.val] = 1
            // process current node here 处理当前节点
            // ...
            for node in _root.children {
                dfs(node)
            }
            return
        }
        
        // 非递归版本
        func dfsWithoutRecursive(_ root: Node?) {
            var visited = [Int :Int]()
            guard let _root = root else { return }
            
            var stackNode = [Node]()
            stackNode.append(_root)
            while stackNode.count > 0 {
                let node = stackNode.removeFirst()
                if visited.keys.contains(node.val) {
                    continue
                }
                visited[node.val] = 1
                // process current node here 处理当前节点
                // ...
    
                for child in node.children {
                    stackNode.append(node)
                }
            }
            return
        }
    }
    

    总结:如果只是要找到某一个结果是否存在,那么DFS会更高效。因为DFS会首先把一种可能的情况尝试到底,才会回溯去尝试下一种情况,只要找到一种情况,就可以返回了。但是BFS必须所有可能的情况同时尝试,在找到一种满足条件的结果的同时,也尝试了很多不必要的路径。

    相关文章

      网友评论

          本文标题:深度优先搜索DFS—Swift代码模板

          本文链接:https://www.haomeiwen.com/subject/jhfaurtx.html