广度优先搜索不使用队列

广度优先搜索不使用队列

广度 首先,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 << node << ", ";      vertices.pop();      for (int i = 0; i < 2; i++) {         int next = adjacencyList[node][i];                     if (!visited[next]) {            vertices.push(next);            distances[next] = distances[node] + 1;            visited[next] = true;         }      }   }}int main() {    int adjacencyList[][2] = {{0, 0}, {1, 2}, {3, 4}, {0, 0}, {0, 0}};    int numVertices = 4;    int source = 2;    bfsTraversal(adjacencyList, numVertices, source);    return 0;}

输出

2,3,4,0

示例

#include #include using namespace std;void bfsTraversal(vector<vector>& adjacencyList, int N, int source) {    vector visited(N + 1, false);    vector distances(N + 1, 0);    vector vertices;    vertices.push_back(source);    visited[source] = true;    int curr = 0;    while (curr < vertices.size()) {        int node = vertices[curr];        cout << node << ", ";        for (int i = 0; i < adjacencyList[node].size(); i++) {            int next = adjacencyList[node][i];            if (!visited[next]) {                vertices.push_back(next);                distances[next] = distances[node] + 1;                visited[next] = true;            }        }        curr++;    }    cout << "nDistances from source " << source << ":n";    for (int i = 1; i <= N; i++) {        cout << "Node " << i << ": " << distances[i] << endl;    }}int main() {    int N = 8;    vector<vector> adjacencyList(N + 1);    adjacencyList[0] = {1, 2};    adjacencyList[1] = {2};    adjacencyList[2] = {0, 3};    adjacencyList[3] = {3};    adjacencyList[4] = {5};    adjacencyList[5] = {6, 7};    adjacencyList[6] = {};    adjacencyList[7] = {};    adjacencyList[8] = {};    int source = 5;    bfsTraversal(adjacencyList, N, source);    return 0;}

输出

5, 6, 7, Distances from source 5:Node 1: 0Node 2: 0Node 3: 0Node 4: 0Node 5: 0Node 6: 1Node 7: 1Node 8: 0

结论

本文对不使用行信息结构的广度优先查找 (BFS) 计算进行了说明。 BFS 计算通常用于从给定的源中心开始以逐级方式导航图表。通常,一条线路用于存储要前往的枢纽。无论如何,本文研究了一种可选方法,该方法利用基本列表或集群来存储下一级的集线器。

这种选择性的使用完成了图表的广度优先研究。本文追溯了 BFS 计算的步骤,例如初始化传染性记录、维护 go-to 和分离簇以及使用圆圈来强调中心级别。它还提供了 C 代码说明,说明了不使用一行的 BFS 遍历。该代码准确地研究图表,打印 BFS 遍历排列,并计算从源集线器到所有其他节点的距离。总的来说,本文在不使用线条的情况下对 BFS 计算进行了清晰的说明和可行的用法,展示了一种以广度优先的方式导航图表的可选方法。

以上就是广度优先搜索不使用队列的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1445365.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 22:26:25
下一篇 2025年12月17日 22:26:48

相关推荐

  • 如何html转化URL_将HTML文件或内容转换为URL链接【链接】

    需将HTML转为可访问URL,必须部署到HTTP服务器:一、本地开发服务器(如python -m http.server);二、GitHub Pages永久托管;三、htmlpreview在线预览;四、云存储静态托管;五、data URL编码内联。 如果您拥有一个HTML文件或一段HTML内容,需要…

    2025年12月23日
    000
  • HTML元素拼写错误与CSS样式失效:深入解析及解决方案

    本文深入探讨了因html标签拼写错误(如将`div`误写为`dev`)导致css样式不生效的常见问题。通过详细分析错误原因、提供正确的html结构和css实现方案,特别是针对创建带有背景色和特定高度的动态文本横幅场景,旨在帮助开发者理解并避免此类低级错误,同时掌握实现响应式横幅布局的css技巧。 在…

    2025年12月23日
    000
  • 如何在网页中正确引用图片:避免绝对路径问题

    针对网页开发中图片无法显示的问题,本文详细讲解了图片引用时应避免使用本地绝对路径,并强调了采用相对路径和合理项目文件结构的重要性。通过示例代码,指导开发者如何将图片正确放置于项目文件夹内,并使用相对路径进行引用,确保图片在浏览器中正常加载和显示,提升开发效率与项目可移植性。 在网页开发中,图片是不可…

    2025年12月23日
    000
  • 使用 Jinja2 动态渲染多张图片到 HTML 文件的完整教程

    本教程详细介绍了如何利用 jinja2 模板引擎,通过 python 代码动态地将多张图片加载并渲染到 html 文件中。核心方法是构建一个包含图片元数据的列表字典作为数据源,并结合 jinja2 的 `for` 循环结构遍历数据,从而高效生成包含多张图片的 html 内容。 在 Web 开发中,经…

    2025年12月23日 好文分享
    000
  • HTML文档标题怎么设置_HTML标题标签使用教程

    浏览器标签页显示的标题由标签定义,位于中,是页面的“名片”;而到标签用于构建页面内容结构,属于“骨架”。前者影响SEO和用户体验,后者定义内容层级。应合理使用提升点击率,用H标签组织内容而非仅靠加粗视觉效果。HTML5允许多个在不同分节元素内使用,但为兼容性和清晰性,建议一个页面只保留一个作为主标题…

    2025年12月23日
    100
  • HTML注释符号是什么_HTML注释开始和结束标记详解

    HTML注释以结束,用于添加备注或禁用代码,浏览器会忽略其内容。1. 主要用途包括:解释代码、调试时临时禁用元素、团队协作沟通、标记页面区域及隐藏未完成内容。2. 注释不可嵌套,否则会导致解析错误,应避免在注释内使用–>或 HTML注释符号是以 <!– 开始,并以 –&g…

    2025年12月22日
    000
  • HTML标题分组怎么实现_HTML的hgroup标签使用教程

    核心实现方式是使用标签将主标题与辅助性标题或标语进行语义分组,使其在文档结构中作为一个逻辑单元被识别,提升页面的语义清晰度、无障碍访问体验及搜索引擎理解能力。 HTML标题分组的核心实现方式是利用 标签。它允许你将一个主标题(如 到 中的任意一个)与一个或多个辅助性标题、副标题或标语关联起来,共同构…

    2025年12月22日 好文分享
    000
  • HTML注释会影响页面加载吗_注释对页面性能的影响分析

    HTML注释会增加文件体积并消耗解析资源,影响页面性能。首先,注释增加HTML文件大小,导致下载时间延长,尤其在弱网环境下影响更明显;其次,浏览器解析时需处理注释并生成Comment节点,耗费CPU资源。尽管现代压缩技术可减小其影响,但在高流量、极致性能或低端设备场景下,累积效应仍不可忽视。为平衡可…

    2025年12月22日
    000
  • HTML代码优化:提升网页加载速度的最佳实践

    如果您的网页加载速度缓慢,影响用户体验和搜索引擎排名,可能是由于HTML代码结构不合理或资源加载效率低下所致。以下是优化HTML代码以提升网页加载速度的具体操作步骤: 一、精简HTML文档结构 减少嵌套层级和无意义标签可以降低解析时间,使浏览器更快渲染页面内容。 1、删除多余的 和标签,确保每个元素…

    2025年12月22日
    000
  • HTML文档列表怎么创建_HTML有序无序列表使用教程

    无序列表()适用于项目顺序无关的场景,如产品特性、导航菜单等;有序列表()用于强调顺序的内容,如步骤、排名;两者结合标签可实现语义化、可访问性强的结构,嵌套使用能清晰表达层级关系,避免仅用列表实现样式效果,确保HTML结构正确与可维护性。 HTML文档中创建列表的核心,在于使用 (无序列表)和 (有…

    2025年12月22日
    000
  • HTML文档导航怎么创建_HTMLnav标签使用教程

    使用标签构建语义化导航,结合CSS美化与JavaScript实现响应式交互,并通过ARIA属性和描述性链接文本提升可访问性与SEO。 HTML文档导航的创建,核心在于使用 标签来明确定义页面上的导航区域,并配合 、 、 等标签构建导航链接。这样既能提升语义化,也有利于搜索引擎优化和辅助技术访问。 解…

    2025年12月22日
    000
  • HTML富媒体怎么优化_视频音频内容SEO优化指南

    答案:HTML富媒体优化通过结构化数据、字幕、站点地图等手段提升视频音频内容的搜索引擎可见性与用户体验。 HTML富媒体优化,简单来说,就是让你的视频、音频内容更容易被搜索引擎找到,从而吸引更多流量。核心在于让这些非文本内容也能被“理解”。 解决方案: HTML富媒体的优化策略,其实围绕着“让搜索引…

    2025年12月22日
    000
  • 如何在JavaScript中搜索链接的目标属性的值?

    要在JavaScript中搜索链接的目标属性值,请使用target属性。您可以尝试运行以下代码以获取目标属性的值。 示例 Qries 音疯 音疯是昆仑万维推出的一个AI音乐创作平台,每日可以免费生成6首歌曲。 178 查看详情 var x = document.getElementById(“qri…

    2025年12月21日 好文分享
    000
  • 使用JavaScript的RegExp搜索垂直制表符

    使用JavaScript正则表达式查找垂直制表符,请使用以下代码: v 示例 您可以尝试运行以下代码来查找垂直制表符。它返回找到垂直制表符 (v) 字符的位置 – JavaScript Regular Expression var myStr = “Secure and v Respon…

    2025年12月21日
    000
  • 使用JavaScript正则表达式搜索制表符

    要使用 JavaScript 正则表达式查找制表符,请使用以下命令 – t 示例 您可以尝试运行以下代码来查找制表符。它返回找到制表符 (t) 字符的位置 – JavaScript Regular Expression var myStr = “Simple t Respon…

    2025年12月21日
    000
  • html5搜索匹配怎么做?

    【HTML5+jquery】实现的搜索匹配效果,或者说是搜索过滤,当你在文本框输入一个字符时,如果下边的列表中有以此为开头的内容时,将自动为你显示相关内容。 示例中仅列出了一些,用时候你可以自己再完善下,代码仅为您提供一种思路,希望对你是有帮助的 HTML 公司选择: 厦门集众筹智科技有限公司 苏州…

    2025年12月21日
    000
  • C语言算法问答集:探索排序和搜索算法

    排序和搜索算法在 c 语言编程中至关重要,常见排序算法包括冒泡排序、快速排序和归并排序,而常见搜索算法包括线性搜索和二分搜索,这些算法可用于解决各种数据处理任务,如排序学生成绩、查找字典中的单词和查找成绩排名。 C 语言算法问答集:探索排序和搜索算法 在计算机编程中,算法在解决问题和执行任务方面起着…

    2025年12月18日
    000
  • 使用C++,通过每次成功搜索后将元素加倍来重复搜索一个元素

    在本文中,我们给出了一个整数数组和一个关键字。我们需要在数组中重复查找关键字,并在每次查找时将其加倍。我们需要返回在进行这个操作时数组中不存在的值。 查看一些输入场景以了解该方法在不同情况下的工作原理 让我们来看一个数组 [1,2,6,3,7,4,9],它的键是 1。 Input: {1, 2, 3…

    2025年12月17日
    000
  • 如何使用C++中的哈希搜索算法

    如何使用C++中的哈希搜索算法 哈希(Hash)搜索算法是一种高效的查找和存储技术,它将关键字通过哈希函数转化为一个固定长度的索引,然后利用这个索引在数据结构中进行搜索。在C++中,我们可以通过使用标准库中的哈希容器和哈希函数来实现哈希搜索算法。本文将介绍如何使用C++中的哈希搜索算法,并提供具体的…

    2025年12月17日
    000
  • 如何在Golang中实现搜索功能

    答案:Go语言中搜索功能可根据数据规模选择内存遍历、数据库查询或全文检索。小数据用for循环在切片中查找,支持模糊和大小写忽略;结构体按字段过滤,如按Title搜索文章;大数据用SQLite或PostgreSQL的LIKE或全文索引;复杂需求用Bleve实现分词与相关性排序。 在Go语言中实现搜索功…

    2025年12月16日
    100

发表回复

登录后才能评论
关注微信