Python中的树形图搜索算法
树形图搜索算法是一种常见的搜索算法,它可以用于解决很多问题,例如寻路、人工智能、游戏等等。这种算法通过构建一棵树形图,并通过遍历该树来寻找目标。下面将详细介绍Python中的树形图搜索算法。
代码演示:
class Node(object): """定义一个节点类,表示树形图的节点""" def __init__(self, data): self.data = data # 数据 self.children = [] # 孩子节点 class Tree(object): """定义一个树形图""" def __init__(self, root): self.root = root # 根节点 def add_node(self, parent_node, child_node): """添加一个节点""" parent_node.children.append(child_node) def bfs(self, target): """广度优先搜索""" queue = [self.root] # 用队列存储待遍历节点 while queue: node = queue.pop(0) # 取出队列中的第一个节点 if node.data == target: # 如果目标值是当前节点,则返回该节点 return node else: queue += node.children # 将当前节点的孩子节点加入队列 return None # 如果没有找到目标值,则返回None def dfs(self, target): """深度优先搜索""" stack = [self.root] # 用栈存储待遍历节点 visited = [] # 用来存储已经遍历过的节点 while stack: node = stack.pop() # 取出栈顶节点 if node.data == target: # 如果目标值是当前节点,则返回该节点 return node elif node not in visited: # 如果当前节点未被访问过 visited.append(node) # 将当前节点添加到已访问列表 stack += node.children # 将当前节点的孩子节点加入栈 return None # 如果没有找到目标值,则返回None # 构建一个树形图 root_node = Node('p') tree = Tree(root_node) node1 = Node('i') node2 = Node('d') node3 = Node('a') node4 = Node('n') tree.add_node(root_node, node1) tree.add_node(root_node, node2) tree.add_node(node1, node3) tree.add_node(node1, node4) # 深度优先搜索 node = tree.dfs('n') if node: print("在树形图中找到了目标节点:", node.data) else: print("在树形图中未找到目标节点。") # 广度优先搜索 node = tree.bfs('i') if node: print("在树形图中找到了目标节点:", node.data) else: print("在树形图中未找到目标节点。")
输出结果:
在树形图中找到了目标节点: n 在树形图中找到了目标节点: i
在上面的代码中,我们定义了一个节点类和一个树形图类,然后使用它们来构建一个树形图。在上面的例子中,我们添加了一个根节点和四个孩子节点,并使用深度优先搜索和广度优先搜索来查找目标节点。
在树形图搜索算法中,广度优先搜索是先遍历当前节点的所有孩子节点,然后依次遍历这些孩子节点的孩子节点,直到找到目标节点或者遍历完整个树。而深度优先搜索则是先遍历深度方向上的节点,直到找到目标节点或者遍历到叶子节点。
相关文章