【QuikGraph】C#调用第三方库实现迪杰斯特拉(Dijkstra)算法功能

QuikGraph库介绍

项目地址:https://github.com/KeRNeLith/QuikGraph

QuikGraph为.NET提供了通用的有向/无向图数据结构和算法。
QuikGraph提供了深度优先搜索、广度优先搜索、A*搜索、最短路径、k最短路径,最大流量、最小生成树等算法。

QuikGraph最初由Jonathan “Peli” de Halleux于2003年创建,并命名为QuickGraph。随后更新为YC.QuickGraph。

这个版本的QuickGraph,改名为QuikGraph,是YC.QuickGraph的一个分支。我尝试使用现代C#开发(.NET Core)清理该库,将其作为一个干净的NuGet包提供。该计划旨在全面清理、修复原始库及其所有非核心部件的问题,并对其进行改进。

示例

  1. 创建一个.Net Framework4.7.2框架的项目。
  2. 在NuGet上搜索QuikGraph,并安装。
  3. 引入命名空间:
using QuikGraph.Algorithms.Observers;
using QuikGraph.Algorithms.ShortestPath;
using QuikGraph;
  1. 主要测试代码:
        public void DijkstraSimpleGraph(){// 创建邻接图,使用string类型作为顶点、边的唯一标识var graph = new AdjacencyGraph<string, Edge<string>>(true);// 添加顶点到图中graph.AddVertex("A");graph.AddVertex("B");graph.AddVertex("D");graph.AddVertex("C");graph.AddVertex("E");// 创建边var a_b = new Edge<string>("A", "B");var a_c = new Edge<string>("A", "C");var b_c = new Edge<string>("B", "C");var b_e = new Edge<string>("B", "E");var c_d = new Edge<string>("C", "D");var d_e = new Edge<string>("D", "E");var e_d = new Edge<string>("E", "D");// 添加边到图中graph.AddEdge(a_b);graph.AddEdge(a_c);graph.AddEdge(b_c);graph.AddEdge(c_d);graph.AddEdge(d_e);graph.AddEdge(b_e);graph.AddEdge(e_d);// 定义边的权重var weight = new Dictionary<Edge<string>, double>(graph.EdgeCount){[a_b] = 30,[a_c] = 15,[b_c] = 10,[b_e] = 20,[c_d] = 40,[d_e] = 4,[e_d] = 2,};// 创建算法,传入图和权重var algorithm = new DijkstraShortestPathAlgorithm<string, Edge<string>>(graph, e => weight[e]);// Attach a Vertex Predecessor Recorder Observer to give us the paths// 使用顶点前置记录器,以提供路径计算var predecessorObserver = new VertexPredecessorRecorderObserver<string, Edge<string>>();using (predecessorObserver.Attach(algorithm))//以顶点A为起点,运行算法algorithm.Compute("A");//打印A为起点,到各个点的距离foreach (var vertex in graph.Vertices){Trace.WriteLine($"A-{vertex} = {algorithm.GetDistance(vertex)}");}}

打印输出结果(打印了A为起点,到各个顶点的距离):

A-A = 0
A-B = 30
A-D = 52
A-C = 15
A-E = 50

图结构示意(可以人工检查输出结构的正确性):
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

error: pathspec ‘XXX‘ did not match any file(s) known to git

使用vscode&#xff0c;在本地开发切换分支时&#xff0c;报以下错误&#xff1a; error: pathspec XXX did not match any file(s) known to git 该问题是由于没有对应分支的原因。 首先使用一下命令&#xff0c;查看本地及远程的所有分支。 git branch -a 若没有对应的分…

外星人笔记本-记一次电脑发热过热缘由

背景 笔记本进行过大修&#xff0c;电池鼓包&#xff0c;还好没炸&#xff0c;因此替换电池。发现内存&#xff08;SSD&#xff09;不足&#xff0c;又增加了内存。完成后使用还算正常。但是过一段时间后&#xff0c;系统自动更新几次&#xff08;window10系统就是恶心&#x…

await执行顺序

用一个简单的例子来说明&#xff0c;await到底在等待什么 求代码的打印顺序 function testAsy(x) {return new Promise((resolve) > {setTimeout(() > {resolve(x);}, 3000);}); } async function testAwt() {console.log("async开始执行");// 最先打印let r…

一款功能强大的网络安全综合工具-PotatoTool

一、 简介 这款工具是一款功能强大的网络安全综合工具&#xff0c;旨在为安全从业者、红蓝对抗人员和网络安全爱好者提供全面的网络安全解决方案。它集成了多种实用功能&#xff0c;包括解密、分析、扫描、溯源等&#xff0c;为用户提供了便捷的操作界面和丰富的功能选择。 二…

PPT如何录制视频?看这里,让你轻松上手!

在现代社会&#xff0c;演示文稿&#xff08;ppt&#xff09;已成为我们工作、学习和生活中不可或缺的一部分。无论是商务报告、教育培训还是产品展示&#xff0c;ppt都能以其直观、生动的形式有效地传达信息。可是你知道ppt如何录制视频吗&#xff1f;本文将为您介绍两种ppt录…

榨菜加工污水需要哪些工艺设备

榨菜加工过程中产生的污水含有高浓度的有机物、悬浮物、油脂、盐分以及可能的食品添加剂等污染物。为了有效处理这些污水&#xff0c;通常需要以下工艺设备&#xff1a; 格栅&#xff1a;用于去除污水中的大颗粒固体物质&#xff0c;如菜叶、塑料碎片等。调节池&#xff1a;用于…

407627-60-5,AF647 NHS酯一种高亮度的红色荧光试剂

一、产品概述 中文名称&#xff1a;Alexa Fluor 647活化酯&#xff0c;AF647 NHS酯&#xff0c;AF 647 琥珀酰亚胺酯 英文名称&#xff1a;AF647 NHS&#xff0c;Alexa Fluor 647 NHS ester CAS号&#xff1a;1620475-28-6&#xff0c;407627-60-5&#xff0c;1453856-34-2 …

CAN报文的用途

CAN报文主要有四个用途&#xff0c;分别是应用报文&#xff0c;诊断报文&#xff0c;网络管理报文&#xff0c;标定报文。 应用报文&#xff1a;ECU发送各自应用场景的报文。 诊断报文&#xff1a;查看ECU的故障信息。 网络管理报文&#xff1a;让整个CAN总线上的ECU能够更省电…

可视化数据报道:Kompas.ai如何用图表和动态效果讲述故事

在数字化时代&#xff0c;数据无处不在&#xff0c;而如何将这些数据转化为易于理解且吸引人的故事&#xff0c;成为信息传递的关键。数据可视化作为一种强有力的工具&#xff0c;能够帮助观众快速把握复杂信息的要点&#xff0c;增强记忆&#xff0c;并激发情感共鸣。本文将深…

怎么设置一天多个时间点的闹钟提醒?

在日常生活中&#xff0c;我们经常需要在一天的不同时间点完成特定的任务&#xff0c;如定时喝水、定时查看后台数据、定时吃药等。这时候&#xff0c;如果能有一款软件&#xff0c;可以在一条日程里轻松设置多个时间点的闹钟提醒&#xff0c;那将大大提高我们的工作效率和生活…

SpringBoot项目配置HTTPS接口的安全访问

参考&#xff1a;https://blog.csdn.net/weixin_45355769/article/details/131727935 安装好openssl后&#xff0c; 创建 D:\certificate CA文件夹下包含&#xff1a; index.txt OpenSSL在创建自签证书时会向该文件里写下索引database.txt OpenSSL会模拟数据库将一些敏感信息…

Windows Server 2019虚拟机安装

目录 第一步、准备工作 第二步、部署虚拟机 第三步、 Windows Server 2019系统启动配置 第一步、准备工作 下载Windows Server 2019系统镜像 官网下载地址&#xff1a;Windows Server 2019 | Microsoft Evaluation Center VMware Workstation 17下载地址&#xff1a; 链…

GoEdge自建CDN工具

GoEdge是一款管理分布式CDN边缘节点的开源工具软件&#xff0c;可以让用户轻松地、低成本地创建CDN/WAF等应用。同时提供免费版本和商业版本&#xff0c;本文基本免费版本安装测试。 GoEdgep安装涉及三部分&#xff1a; 边缘节点 - 接收和响应用户请求的终端节点 管理员系统 - …

使用脚本一键部署项目的示例(脚本会创建syetemctl的系统服务)

文章目录 说明使用脚本一键部署本项目开启/停止服务开启/关闭开机自动运行更新项目 参考地址&#xff1a;https://github.com/Evil0ctal/Douyin_TikTok_Download_API?tabreadme-ov-file 说明 后续相关项目可以使用这种方式创建脚本&#xff0c;脚本均放置在项目根目录下的bas…

基于STM32的智能垃圾桶设计(论文+源码)_kaic

基于STM32的智能垃圾桶设计 摘 要 随着社会科学技术的迅猛进展&#xff0c;人们的生活质量和速度也在不断提高。然而&#xff0c;大多数传统的家庭垃圾桶已经过时且缺乏创新&#xff0c;缺乏人性化设计。它们使用起来不方便、不卫生&#xff0c;所有的生活和废物垃圾都被混合…

目标检测——校园异常事件数据集

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

【网站项目】SpringBoot364考研信息查询系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

【WEEK11】 【DAY1】Employee Management System Part 2【English Version】

2024.5.6 Monday Continuing from 【WEEK10】 【DAY2】Employee Management System Part 1【English Version】 Contents 10.3. Page Internationalization10.3.1. Preparation10.3.2. Configuration File Writing10.3.2.1. Create an i18n (abbreviation for internationaliza…

(超简单)SpringBoot中简单用工厂模式来实现

简单讲述业务需求 业务需要根据不同的类型返回不同的用户列表&#xff0c;比如按角色查询用户列表、按机构查询用户列表&#xff0c;用户信息需要从数据库中查询&#xff0c;因为不同的类型查询的逻辑不相同&#xff0c;因此简单用工厂模式来设计一下&#xff1b; 首先新建一个…

【C++历练之路】红黑树——map与set的封装实现

W...Y的个人主页&#x1f495; gitee代码仓库分享&#x1f60a; 前言&#xff1a;上篇博客中&#xff0c;我们为了使二叉搜索树不会出现”一边倒“的情况&#xff0c;使用了AVL树对搜索树进行了处理&#xff0c;从而解决了数据在有序或者接近有序时出现的情况。但是AVL树还会…