Swift 深度和广度优先搜索

  • DFS 深度搜索。从当前角落开始,顺着一个方向不停的找。假如这个方向全部搜索完毕依然没有找到钥匙,就回到起始角落,从另一个方向寻找,直到找到钥匙或所有方向都搜索完毕为止。
  • BFS 广度搜索。从当前角落开始,每次把最近所有方向的角落全部搜索一遍,直到找到钥匙或所有方向都搜索完毕为止。
import Foundation // DFS的实现用递归,BFS的实现用循环(配合队列)。 class Node { var value: Int var children: [Node] init(value: Int) { self.value = value self.children = [] } func addChild(_ child: Node) { children.append(child) } } func bfs_stack(node: Node?) { guard let node = node else { return } var stack: [Node] = [node] while !stack.isEmpty { let current = stack.removeFirst() print(current.value) for child in current.children { stack.append(child) } } } func dfs_recursive(node: Node?) { guard let node = node else { return } print(node.value) for child in node.children { dfs_recursive(node: child) } } // 测试 BFS let rootNode = Node(value: 1) let node2 = Node(value: 2) let node3 = Node(value: 3) let node4 = Node(value: 4) let node5 = Node(value: 5) rootNode.addChild(node2) rootNode.addChild(node3) node2.addChild(node4) node2.addChild(node5) bfs_stack(node: rootNode) // 输出: 1, 2, 3, 4, 5 print("\n") dfs_recursive(node: rootNode) // 输出: 1, 2, 4, 5, 3