其他分享
首页 > 其他分享> > 队列和广度优先搜索

队列和广度优先搜索

作者:互联网

队列

队列(Queue):简称为队,一种线性表数据结构,是一种只允许在表的一端进行插入操作,而在表的另一端进行删除操作的线性表。

把队列中允许插入的一端称为 「队尾(rear)」;把允许删除的另一端称为 「队头(front)」。当表中没有任何数据元素时,称之为 「空队」

队列有两种基本操作:「插入操作」「删除操作」

存储方式

基本操作

广度优先遍历

广度优先搜索算法(Breadth First Search):简称为 BFS,又译作宽度优先搜索 / 横向优先搜索。是一种用于遍历或搜索树或图的算法。该算法从根节点开始,沿着树的宽度遍历树或图的节点。如果所有节点均被访问,则算法中止。

广度优先遍历类似于树的层次遍历过程。呈现出一层一层向外扩张的特点。先看到的节点先访问,后看到的节点后访问。遍历到的节点顺序符合「先进先出」的特点,所以广度优先搜索可以通过「队列」来实现。

基于队列实现的广度优先搜索实现步骤

  1. graph 为存储无向图的字典变量,start 为开始节点。
  2. 然后定义 visited 为标记访问节点的 set 集合变量。定义 q 为存放节点的队列。
  3. 首先将起始节点放入队列 q中,即 q.put(start)。并将其标记为访问,即 visited.add(start)
  4. 从队列中取出第一个节点 node_u。访问节点 node_u,并对节点进行相关操作(看具体题目要求)。
  5. 遍历与节点 node_u 相连并构成边的节点 node_v
    • 如果 node_v 没有被访问过,则将 node_v 节点放入队列中,并标记访问,即 q.append(node_v)visited.add(node_v)
  6. 重复步骤 4 ~ 5,直到 q 为空。

参考:https://gitee.com/itcharge/LeetCode-Py

标签:node,优先,队头,队列,元素,插入,广度,节点
来源: https://www.cnblogs.com/Lusai/p/16701239.html