C#,图论与图算法,有向图(Direct Graph)广度优先遍历(BFS,Breadth First Search)算法与源程序

1 图的广度优先遍历

图的广度优先遍历(或搜索)类似于树的广度优先遍历(参见本文的方法2)。这里唯一需要注意的是,与树不同,图可能包含循环,因此我们可能再次来到同一个节点。为了避免多次处理节点,我们使用布尔访问数组。为简单起见,假设所有顶点都可以从起始顶点到达。

例如,在下图中,我们从顶点2开始遍历。当我们到达顶点0时,我们会查找它的所有相邻顶点。2也是0的相邻顶点。如果我们不标记访问的顶点,那么2将再次处理,它将成为一个非终止过程。下图的宽度优先遍历为2、0、3、1。

2 BFS 的应用

我们前面讨论了图的广度优先遍历算法。我们还讨论了深度优先遍历的应用。本文讨论了广度优先搜索的应用。

1) 无权图的最短路径与最小生成树在无权图中,最短路径是边数最少的路径。对于宽度优先,我们总是使用最小边数从给定源到达顶点。此外,对于无权图,任何生成树都是最小生成树,我们可以使用深度优先遍历或宽度优先遍历来查找生成树。

2) 对等网络。在像BitTorrent这样的对等网络中,广度优先搜索用于查找所有邻居节点。

3) 搜索引擎中的爬虫:爬虫使用广度优先构建索引。这个想法是从源页面开始,跟踪源页面的所有链接,并继续这样做。深度优先遍历也可用于爬虫,但宽度优先遍历的优点是,构建树的深度或级别可能会受到限制。

4) 社交网站:在社交网络中,我们可以使用广度优先搜索到“k”级,在给定的距离“k”内找到与某人保持距离的人。

播放视频

5) GPS导航系统:广度优先搜索用于查找所有相邻位置。

6) 网络广播:在网络中,广播的数据包遵循广度优先搜索到达所有节点。

7) 在垃圾收集中:宽度优先搜索用于使用切尼算法复制垃圾收集。有关详细信息,请参阅和。广度优先搜索优于深度优先搜索,因为参考位置更好:

8) 无向图中的循环检测:在无向图中,可以使用广度优先搜索或深度优先搜索来检测循环。我们也可以使用BFS来检测有向图中的循环,

9) Ford–Fulkerson算法在Ford-Fulkerson算法中,我们可以使用宽度优先或深度优先遍历来找到最大流。广度优先遍历是首选,因为它将最坏情况的时间复杂度降低到O(VE2)。

10) 为了测试图是否是二部图,我们可以使用广度优先遍历或深度优先遍历。

11) 路径查找我们可以使用宽度优先或深度优先遍历来查找两个顶点之间是否存在路径。

12) 查找一个连接组件中的所有节点:我们可以使用广度优先或深度优先遍历来查找从给定节点可以访问的所有节点。

许多算法,如Prim的最小生成树和Dijkstra的单源最短路径,都使用类似于广度优先搜索的结构。

由于广度优先搜索是图的核心算法之一,因此可以有更多的应用。

参考:

C#,图(Graph)的数据结构设计与源代码icon-default.png?t=O83Ahttps://blog.csdn.net/beijinghorn/article/details/125133711?spm=1001.2014.3001.5501

3 BFS源代码

using System;
using System.Text;
using System.Linq;
using System.Collections;
using System.Collections.Generic;namespace Legalsoft.Truffer.Algorithm
{public partial class Graph{public List<int> Traversal { get; set; } = new List<int>();public void BFS_For_Direct_Graph(int s){bool[] visited = new bool[Node_Number];for (int i = 0; i < Node_Number; i++){visited[i] = false;}List<int> queue = new List<int>();visited[s] = true;queue.Add(s);while(queue.Count >0){s = queue[0];Traversal.Add(s);queue.RemoveAt(0);List<int> list = Adjacency[s];foreach (var val in list){if (visited[val] == false){visited[val] = true;queue.Add(val);}}}}}public static partial class GraphDrives{public static string BFS_For_Direct_Graph(){Graph g = new Graph(8, 0, true);g.AddEdge(0, 1);g.AddEdge(0, 2);g.AddEdge(1, 2);g.AddEdge(2, 0);g.AddEdge(2, 3);g.AddEdge(3, 3);g.AddEdge(1, 4);g.AddEdge(1, 5);g.AddEdge(4, 6);g.AddEdge(4, 7);g.BFS_For_Direct_Graph(2);return String.Join(",", g.Traversal.ToArray());}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/811.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kafka 主题管理

主题作为消息的归类&#xff0c;分区则是对消息的二次归类。分区可以有一至多个副本&#xff0c;每个副本对应一个日志文件。 分区的划分不仅为Kafka提供了可伸缩性、水平扩展的功能&#xff0c;还通过多副本机制来为Kafka提供数据冗余以提高可靠性。 图 主题、分区、副本和日…

案例研究:UML用例图中的结账系统

在软件工程和系统分析中&#xff0c;统一建模语言&#xff08;UML&#xff09;用例图是一种强有力的工具&#xff0c;用于描述系统与其用户之间的交互。本文将通过一个具体的案例研究&#xff0c;详细解释UML用例图的关键概念&#xff0c;并说明其在设计结账系统中的应用。 用…

51c自动驾驶~合集46

我自己的原文哦~ https://blog.51cto.com/whaosoft/13050104 #世界模型会是L3自动驾驶的唯一解吗 三维空间占有率&#xff08;3D Occupancy&#xff09;预测的目的是预测三维空间中的每个体素是否被占有&#xff0c;如果被占有&#xff0c;则对应的体素将被标记。3D Semant…

忘记了PDF文件的密码,怎么办?

PDF文件可以加密&#xff0c;大家都不陌生&#xff0c;并且大家应该也都知道PDF文件有两种密码&#xff0c;一个打开密码、一个限制编辑密码&#xff0c;因为PDF文件设置了密码&#xff0c;那么打开、编辑PDF文件就会受到限制。忘记了PDF密码该如何解密&#xff1f; PDF和offi…

fastapi 使用

参考&#xff1a; https://fastapi.tiangolo.com/zh/tutorial/first-steps/https://fastapi.tiangolo.com/zh/tutorial/first-steps/ FastAPI 用于基于标准 Python 类型提示使用 Python 构建 API&#xff0c;使用 ASGI 的标准来构建 Python Web 框架和服务器。所有简单理解&a…

单片机(MCU)-简单认识

简介&#xff1a; 内部集成了CPU&#xff0c;RAM&#xff0c;ROM&#xff0c;定时器&#xff0c;中断系统&#xff0c;通讯接口等一系列电脑的常用硬件功能。 单片机的任务是信息采集&#xff08;依靠传感器&#xff09;&#xff0c;处理&#xff08;依靠CPU&#xff09;&…

解决el-table表格数据量过大导致页面卡顿问题 又名《umy-ui---虚拟表格仅渲染可视区域dom的神》

后台管理系统的某个页面需要展示多个列表 数据量过多 页面渲染dom卡顿 经调研发现两个组件 pl-table和umy-ui &#xff08;也就是u-table&#xff09; 最终决定使用umy-ui 它是专门基于 Vue 2.0 的桌面端组件库 流畅渲染表格万级数据 而且他是对element-ui的表格做了二次优化…

提升租赁效率的租赁小程序全解析

内容概要 在如今快节奏的生活中&#xff0c;租赁小程序俨然成为了提升租赁效率的一把利器。无论是个人还是企业&#xff0c;都会因其便捷的功能而受益。简单来说&#xff0c;租赁小程序能让繁琐的租赁流程变得轻松、高效。在这里&#xff0c;我们将带您畅游租赁小程序的海洋&a…

【2024年华为OD机试】(C卷,100分)- 输出指定字母在字符串的中的索引(Java JS PythonC/C++)

一、问题描述 题目描述 给定一个字符串&#xff0c;把字符串按照大写在前小写在后排序&#xff0c;输出排好后的第 K 个字母在原来字符串的索引。相同字母输出第一个出现的位置。 输入描述 无 输出描述 无 用例 用例 1 输入: hAkDAjByBq 4输出: 6说明: 排好序后 AAB…

Vue sm3国密 IE模式报错处理

1、sm-crypto 转义错误 查看报错信息包名 在vue.config.js的transpileDependencies中把依赖包添加进去&#xff0c;让babel能够转译sm-crypto包 babel.config.js module.exports {presets: [[vue/app, {useBuiltIns: entry}]] }2、exports.destroy (() &#xff1e; { … }&a…

超燃预告!Origin百图绘制系列即将登场

Hello&#xff0c;大家好 这里是练习时长两年半的菜狗~ 持续更新各种竞赛&#xff0c;科研&#xff0c;保研&#xff0c;学习干货ing 回想刚开始打比赛那会&#xff0c;啥都不懂&#xff0c;就从用 Excel 画图起步&#xff0c;绘制的图形实在太难看。后来运用 Matlab&#xf…

burpsiute的基础使用(2)

爆破模块&#xff08;intruder&#xff09;&#xff1a; csrf请求伪造访问&#xff08;模拟攻击&#xff09;: 方法一&#xff1a; 通过burp将修改&#xff0c;删除等行为的数据包压缩成一个可访问链接&#xff0c;通过本地浏览器访问&#xff08;该浏览器用户处于登陆状态&a…

【日常小记】Ubuntu启动后无图形界面且网络配置消失

【日常小记】Ubuntu启动后无图形界面且网络配置消失 解决方法&#xff1a; 1. 输入后恢复网络: #sudo dhclient 2. 重新安装ubuntu-desktop #sudo apt-get install ubuntu-desktop&#xff01;&#xff01;&#xff01;请关注是否能ping通某网站&#xff08;例如百度&…

30天开发操作系统 第 12 天 -- 定时器 v1.0

前言 定时器(Timer)对于操作系统非常重要。它在原理上却很简单&#xff0c;只是每隔一段时间(比如0.01秒)就发送一个中断信号给CPU。幸亏有了定时器&#xff0c;CPU才不用辛苦地去计量时间。……如果没有定时器会怎么样呢?让我们想象一下吧。 假如CPU看不到定时器而仍想计量时…

010:传统计算机视觉之大津算法初探

本文为合集收录&#xff0c;欢迎查看合集/专栏链接进行全部合集的系统学习。 合集完整版请参考这里。 上一节学习了利用 Canny 算法来完成一个图片的边缘检测&#xff0c;从而可以区分出图像的边缘。 本节再了解一个计算机视觉中更常见的应用&#xff0c;那就是把图片的前景和…

Python中定位包含特定文本信息的元素

目录 一、为什么需要定位包含文本信息的元素 二、使用Selenium定位包含文本的元素 1. 使用find_element_by_link_text 2. 使用find_element_by_partial_link_text 3. 使用XPath定位包含文本的元素 4. 使用CSS选择器定位包含文本的元素 三、使用BeautifulSoup定位包含文本…

使用uniapp 微信小程序一些好用的插件分享

总结一下自己在开发中遇见的一问题&#xff0c;通过引入组件可以快速的解决 1.zxz-uni-data-select 下拉框选择器(添加下拉框检索&#xff0c;多选功能&#xff0c;多选搜索功能&#xff0c;自定义 下拉框插件&#xff0c;使用这个的原因是因为 uniui uview 组件库下拉框太…

sql server cdc漏扫数据

SQL Server的CDC指的是“变更数据捕获”&#xff08;Change Data Capture&#xff09;。这是SQL Server数据库提供的一项功能&#xff0c;能够跟踪并记录对数据库表中数据所做的更改。这些更改包括插入、更新和删除操作。CDC可以捕获这些变更的详细信息&#xff0c;并使这些信息…

Unreal Engine 5 (UE5) Metahuman 的头部材质

在图中&#xff0c;你展示了 Unreal Engine 5 (UE5) Metahuman 的头部材质部分&#xff0c;列出了头部材质的多个元素。以下是对每个部分的解释&#xff1a; 材质解释 Element 0 - MI_HeadSynthesized_Baked 作用&#xff1a; 这是 Metahuman 的主要头部材质&#xff0c;控制整…

springboot使用Easy Excel导出列表数据为Excel

springboot使用Easy Excel导出列表数据为Excel Easy Excel官网&#xff1a;https://easyexcel.opensource.alibaba.com/docs/current/quickstart/write 主要记录一下引入时候的pom&#xff0c;直接引入会依赖冲突 解决方法&#xff1a; <!-- 引入Easy Excel的依赖 -->&l…