广度优先搜索(BFS)解题总结
阅读原文时间:2023年07月08日阅读:1

广度优先搜索算法(Breadth-First-Search),是一种图形搜索算法。

简单的说,BFS是从根节点开始,沿着树(图)的宽度遍历树(图)的节点。

如果所有节点均被访问,则算法中止。

BFS同样属于盲目搜索。

一般用队列数据结构来辅助实现BFS算法。

如下图,其广度优先算法的遍历顺序为:1->2->3->4->5->6->7->8

  1. 首先将根节点放入队列中。

  2. 从队列中取出第一个节点,并检验它是否为目标。如果找到目标,则结束搜寻并回传结果。否则将它所有尚未检验过的直接子节点加入队列中。

  3. 若队列为空,表示整张图都检查过了——亦即图中没有欲搜寻的目标。结束搜寻并回传“找不到目标”。

  4. 重复步骤2。

    Python

    def BFS(root):
    visited = set()
    queue = []
    queue.append([root])

    while queue:
        node = queue.pop()
        visited.add(node)
    process(node)
    nodes = generate_related_nodes(node)
    queue.push(nodes)
    # other processing work

    // Golang
    type TreeNode struct {
    Val int
    Left *TreeNode
    Right *TreeNode
    }

    func BFS(root TreeNode){ visited := make(map[TreeNode]bool)
    queue := make([]*TreeNode,0)
    queue = append(queue, root)

    for len(queue)>0{
        node := queue[0]
        queue = queue[1:]
        visited[node] = true
    process(node)
    nodes := generate_related_nodes(node)
    queue = append(queue, nodes...)
    } // other processing work

    }

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器