广度优先搜索不使用队列
广度 首先,Look (BFS) 是一种图表遍历计算,用于研究图表中广度运动中的中心。 BFS 的正常使用利用线路信息结构来跟踪即将到来的集线器。无论如何,可以想象在不使用明确线路的情况下利用其他信息结构来执行 BFS。
在没有线路的情况下实现 BFS 的一种可选方法是利用两个集群或记录:一个用于正在调查的当前级别的集线器,另一个用于要调查的下一级集线器。起初,当前级别列表包含源中心。
计算首先强调当前级别列表并转到每个集线器。对于每个经过的枢纽,其相邻的枢纽都会受到检查。如果未访问相邻的集线器,则将其标记为已访问并添加到其他级别列表中。该句柄将继续进行,直到当前级别列表中的所有集线器都经过为止。
一旦当前级别列表完全遍历完毕,计算将继续到另一个级别列表,并重新哈希前往集线器并检修下一个级别列表的方法。此准备工作将持续进行,直到不再有未访问的节点为止。
使用的方法
广度优先方法
广度优先方法
BFS 算法从源集线器开始,调查其邻居,最近又转移到另一级别的邻居。使用线路信息结构来跟踪您访问的枢纽。在每个周期中,计算都会访问一个集线器,将其标记为已完成,并对未访问的相邻集线器进行排队。此准备工作将持续进行,直到所有可到达的中心都被访问为止。
代码初始化一个向量 adj 来表示图表的传染性列表。向量的每个文件都与一个中心进行比较,每个记录的值包含相邻的中心。 BFS 遍历由 BFS 工作执行,它采用源集线器、集线器数量 N、经过集线器的向量 vis、单独的 dp 以及用于跟踪要访问的集线器的向量 v。 bfsTraversal 工作初始化已消失的集线器并删除向量,然后调用 BFS 工作来执行遍历。
算法
创建图表的传染列表表示形式。
初始化一行来存储要访问的集线器。
初始化消失集群以跟踪消失节点。
初始化删除集群以在每个集线器上存储从源集线器删除的内容。将源集线器的分隔符设置为0。
将源集线器排入队列并检查其是否已访问。
虽然管线不可净化,但请执行以下操作:
删除队列头部的集线器。对于已出队且尚未遍历的每个邻居集线器,请执行以下操作: 将相邻集线器排队。将相邻的枢纽标记为已访问。将邻居集线器删除更新为出队集线器删除(也是 1)。
重复步骤 6,直到该行为空。
BFS 遍历完成后,单独的集群将包含从源节点到图中所有其他中心的间隔。
(可选)您还可以在 BFS 遍历中跟踪每个集线器的父集线器,以便以最简单的方式从源集线器到所有其他集线器。
示例
#include #include #include using namespace std; void bfsTraversal(int adjacencyList[][2], int numVertices, int source) { bool visited[numVertices + 1] = {false}; int distances[numVertices + 1] = {0}; queue vertices; vertices.push(source); visited[source] = true; while (!vertices.empty()) { int node = vertices.front(); cout 登录后复制