Python广度优先搜索算法(BFS)实现

2023-04-17 00:00:00 算法 优先 广度

BFS算法是一种用于图像和树数据结构中的搜索算法。其基本思想是从一个起点开始,沿着宽度方向遍历图像或树,直到找到目标节点为止。这种搜索方法通常使用队列来实现。

下面我们来演示一下如何使用Python实现BFS算法。假设我们要在下面的二叉树中搜索值为5的节点:

        1
       / \
      2   3
     / \ / \
    4  5 6  7

我们的Python代码可以表示为:

class Node:
    # 初始化节点
    def __init__(self, val=None, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

# 广度优先搜索
def bfs(root, target):
    queue = []
    queue.append(root)
    while queue:
        node = queue.pop(0)
        if node.val == target:
            return node
        if node.left:
            queue.append(node.left)
        if node.right:
            queue.append(node.right)
    return None

# 构建二叉树
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
root.right.left = Node(6)
root.right.right = Node(7)

# 搜索值为5的节点
result = bfs(root, 5)

if result:
    print(result.val)
else:
    print("没有找到该节点")

运行上面的代码后,我们将得到输出结果“5”。

当我们搜索一个字符串列表时,我们可以使用类似的方法。下面是一个搜索“pidancode.com”字符串的示例:

# 广度优先搜索
def bfs_str(strings, target):
    queue = []
    queue.append("")
    while queue:
        string = queue.pop(0)
        if string == target:
            return string
        for c in strings:
            new_string = string + c
            queue.append(new_string)
    return None

# 搜索字符串 "pidancode.com"
result = bfs_str("abcdefghijklmnopqrstuvwxyz.", "pidancode.com")

if result:
    print(result)
else:
    print("没有找到该字符串")

这里我们使用for循环迭代所有可能的字符,将它们加入队列中,并在每次迭代中检查队列中的字符串是否与目标字符串相匹配。

总的来说,使用Python实现BFS算法是相对简单的。通过使用队列数据结构,我们可以沿着广度方向对图像或树进行遍历,以查找目标节点或元素。

相关文章