【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包提供。该计划旨在全面清理、修复原始库及其所有非核心部件的问题,并对其进行改进。
示例
- 创建一个.Net Framework4.7.2框架的项目。
- 在NuGet上搜索QuikGraph,并安装。
- 引入命名空间:
using QuikGraph.Algorithms.Observers;
using QuikGraph.Algorithms.ShortestPath;
using QuikGraph;
- 主要测试代码:
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
图结构示意(可以人工检查输出结构的正确性):

相关文章:
【QuikGraph】C#调用第三方库实现迪杰斯特拉(Dijkstra)算法功能
QuikGraph库介绍 项目地址:https://github.com/KeRNeLith/QuikGraph QuikGraph为.NET提供了通用的有向/无向图数据结构和算法。 QuikGraph提供了深度优先搜索、广度优先搜索、A*搜索、最短路径、k最短路径,最大流量、最小生成树等算法。 QuikGraph最初…...
查看ubuntu当前路径的剩余存储空间
要查看Ubuntu当前路径所在磁盘分区的剩余存储空间,应该使用df命令,而不是du命令,因为df命令能显示磁盘分区的使用情况,包括总容量、已用空间和可用空间。为了使输出更易于阅读,可以加上-h选项。如果你还想知道特定挂载…...
利用预训练模型和迁移学习打造智能狗门
引言 在深度学习的世界里,预训练模型和迁移学习是两个强大的概念,它们允许我们利用已有的模型和知识来解决新的问题。在本博客中,我们将探索如何使用预训练的模型来创建一个智能狗门,这个系统将能够识别狗并允许它们进入…...
常用Linux命令详细总结
一、文档编辑、过滤、查看命令 1、cp 复制文件和目录 -a 复制文件并保持文件属性 -d 若源文件为链接文件,则复制链接文件属性而非文件本身 -i 覆盖文件前提示,如果不要提示,在命令前加上\ -r 递归复制,通常用于目录的复制 …...
基于SpringBoot的竹宣非遗宣传网站
摘要 随着互联网的普及和数字化时代的到来,竹编等非物质文化遗产的保护与传承面临新的机遇和挑战。该研究旨在使用SpringBoot后端框架与Vue前端框架,构建一个竹编非遗宣传网站,通过丰富的展示形式和交互体验,提升公众对竹编这一非…...
怎么清理服务器的C盘?
有时候我们经常会遇到C盘被占满的情况,C盘被占满的原因有很多,下面我们就来分析下有可能导致C盘占满的原因: 第一种情况:中毒 打开服务器任务管理器选择进程,并且勾选显示所有用户的进程,我们可以点击映像…...
动态规划----股票买卖问题(详解)
目录 一.买卖股票的最佳时机: 二.买卖股票的最佳时机含冷冻期: 三.买卖股票的最佳时期含⼿续费: 四.买卖股票的最佳时机III: 五.买卖股票的最佳时机IV: 买卖股票的最佳时机问题介绍:动态规划买卖股票的最佳时机是一个经典的…...
Unity射线检测不到MeshCollider的原因
当我们构建的模型是单面模型时,就会出现射线检测不到MeshCollider的问题,对于渲染,我们可以Cull Off来实现双面渲染,而在射线检测时,Unity提供了一个API来控制是否检测背面:Physics.queriesHitBackfaces 案…...
ssrf初步
一,简介 全称:Server-Side Request Forgery(中文:服务器端请求伪造) 攻击者从服务端发起请求,让服务器连接任意外部系统,从而泄露敏感数据。主要利用各种协议的请求伪造,例如php协…...
linux 安装 mangodb 并设置服务开机自启
1、下载 wget http://mosquitto.org/files/source/mosquitto-1.6.8.tar.gz 2、解压 tar -zxvf mosquitto-1.6.8.tar.gz 3、编译安装cd mosquitto-1.6.8 make sudo make install4、在当前目录。进入mosquitto服务文件存放的文件夹 cd service/systemd可以看到3个文件 点击read…...
Virtualbox7.0.10+Ubuntu20.04网络配置
虚拟机部署在服务器上时,需要进行网络配置,使虚拟机和服务器在同网段下,以保证内网的终端可以访问到虚拟机 1. 设置虚拟机 打开虚拟机设置,选择“网络”,将网卡设为桥接网卡 注:设置前,需要先…...
设计模式之服务定位器模式
想象一下,你的Java应用是一座庞大的迷宫,里面藏着无数宝贵的服务宝藏,而你正需要一张精确的藏宝图来指引方向,迅速找到并利用这些宝藏。服务定位器模式,正是这样一张神奇的地图,它帮你动态定位并获取应用中…...
冯喜运:5.12黄金回撤继续上涨,下周原油走势分析
【黄金消息面分析】:本周,黄金市场迎来了自4月中旬以来的最佳单周表现。周五(3月9日),金价攀升至2360.54美元/盎司,涨幅0.62%,而纽约商品交易所6月交割的黄金期货价格上涨1.5%,收报2…...
JavaEE企业级开发中常用的JDK7和JDK8的时间类
JDK7时间类 全世界的时间有一个统一的计算标准 在同一条经线上的时间是一样的 格林威治时间 简称GMT 计算核心 地球自转一天是24小时 太阳直射正好是12小时 但是误差太大 现在用原子钟来代替 用铯原子震动的频率来计算时间,作为世界的标准时间UTC 中国标准时间…...
leetcode 2316.统计无向图中无法互相到达点对数
思路:并查集 其实就是连通块的一个变形题目,一般的连通块题目要我们求的是连通个数,或者能不能到达,这里反过来问了。 首先,我们用dfs也是可以做到的,在dfs中统计每一个连通块的个数,然后用乘…...
WPS二次开发系列:如何使用WPS返回的FileUri
作者持续关注 WPS二次开发专题系列,持续为大家带来更多有价值的WPS开发技术细节,如果能够帮助到您,请帮忙来个一键三连,更多问题请联系我(QQ:250325397) 目录 什么是FileUri 在SDK中的使用场景 打开文档时…...
python删除一个文件夹所有文件
在Python中,可以使用os模块来删除一个文件夹中的所有文件,但保留文件夹本身。以下是一个简单的例子: import osdef delete_files_in_folder(folder_path):for filename in os.listdir(folder_path):file_path os.path.join(folder_path, fi…...
overflow:hidden对解决外边距塌陷的个人理解
外边距塌陷: 子元素的上外边距大于父元素的上外边距,导致边距折叠,取两者之间最大值,即子元素外边距,导致父元素上外边距失效。 解决办法:在父元素样式添加overflow:hidden;或者border:1px solid black;(不…...
【linux软件基础知识】- 文件的概念:Linux 中的文件
Linux 中的文件 在 Linux 中,文件是存储在存储设备(例如硬盘驱动器或固态驱动器)上的数据项的集合。 文件被组织为字节序列,并由文件系统中的唯一名称来标识。 以下是 Linux 中文件的一些关键特征: 字节序列:Linux 中的文件被视为字节序列。 每个字节可以表示一个字符…...
Context capture/Pix4Dmapper/AutoCAD/CASS/EPS软件的安装流程与使用方法;土方量计算;无人机摄影测量数据处理
目录 专题一 无人机摄影测量技术应用现状及其发展 专题二 基本原理和关键技术讲解 专题三 无人机影像外业数据获取 专题四 数据处理环境建立与软件熟悉 专题五 GNSS数据土方量计算 专题六 基于无人机影像数据的正射影像制作 专题七 基于无人机影像数据的三维模型制作 专…...
将OpenSSH集成到OpenHarmony系统镜像:从编译到system分区的完整部署流程
OpenHarmony系统镜像中集成OpenSSH的工程化实践 在物联网设备快速普及的今天,安全远程管理成为嵌入式系统开发中不可或缺的一环。作为开源鸿蒙生态的核心,OpenHarmony系统需要提供完善的远程访问能力,而OpenSSH作为行业标准的加密通信工具&am…...
7分钟掌握中国行政区划数据:从零到实战的完整指南
7分钟掌握中国行政区划数据:从零到实战的完整指南 【免费下载链接】Administrative-divisions-of-China 中华人民共和国行政区划:省级(省份)、 地级(城市)、 县级(区县)、 乡级&…...
告别手写解析!用Python Cantools 39.4.5一键生成CAN/CANFD DBC的C代码(附批处理脚本)
从DBC到C代码:Python Cantools全自动转换实战指南 在汽车电子和嵌入式开发领域,CAN总线通信是核心基础设施,而DBC文件则是定义CAN/CANFD通信协议的行业标准。传统开发流程中,工程师需要手动解析DBC文件并编写大量信号打包/解包代码…...
Tauri + GitHub Actions 自动化打包指南:如何为你的桌面应用配置跨平台自动更新
Tauri GitHub Actions 自动化打包与更新体系构建指南 当你的Tauri应用从开发阶段进入产品化阶段时,如何确保用户能够无缝获取最新功能和安全更新,成为影响产品体验的关键因素。本文将带你构建一个完整的自动化打包与更新体系,从签名机制到发…...
深圳 EMC 整改避坑指南:别让一次失败,毁掉整个产品周期
深圳,这座全球电子产业的心脏,每天都有上百款新产品从这里走向世界。但 2026 年 4 月 FCC 新规的落地,给无数深圳电子企业浇了一盆冷水:单次海外测试费暴涨至 6-10 万元,周期拉长到 6-12 周,一次整改失败&a…...
RV1106开发板WiFi配置全攻略:从AP模式到STA模式,手把手教你搞定网络连接
RV1106开发板WiFi配置全攻略:从AP模式到STA模式,手把手教你搞定网络连接 刚拿到RV1106开发板时,最让人头疼的莫过于WiFi配置了。这块嵌入式开发板在网络连接上有着独特的配置逻辑,尤其是AP(接入点)和STA&am…...
极简TextCNN,五分钟看懂文本分类基线算法
TextCNN引入 TextCNN是基于卷积神经网络实现的用于文本分类的首选基线模型,它没有复杂的循环结构,也不用花费大量时间训练预训练模型,仅通过简单的卷积、池化操作,就能快速捕捉文本中的关键特征,实现文本分类。 Text…...
告别单一视角:用Transformer融合骨架与轮廓,实战提升步态识别鲁棒性
多模态步态识别实战:基于Transformer的骨架与轮廓融合技术 步态识别作为远距离身份认证的重要手段,在安防监控、智能门禁等领域展现出独特优势。然而传统单模态方法在面对换装、遮挡等现实场景时,识别性能往往大幅下降。2023年CVPR会议上提出…...
如何用四探针精确测量半导体电阻率
在半导体行业中,准确测量晶圆电阻率是材料研发和制程质量控制的关键环节。随着工艺节点不断缩小,器件对电性一致性的要求日益严格,仅靠经验无法满足现代制造的需求。因此工程师们大量采用四探针方法对电阻率进行高精度测量。相比传统测量方式…...
2026 年 AI 编程工具横评:Claude Code、Cursor、Copilot、Codex 谁才是真正的生产力?
爆款标题备选我把五个 AI 编程工具全装了一遍,只有一个让我想付费Claude Code vs Cursor vs Copilot:2026 开发者选型实战指南Copilot 的垄断结束了——2026 AI 编程工具真实横评花了一周用 AI 编程 Agent 写项目,最后留下了这一个AI 编程工具…...
