【QuikGraph】C#调用第三方库计算有向图、无向图的连通分量

本文主要是介绍【QuikGraph】C#调用第三方库计算有向图、无向图的连通分量,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

QuikGraph库

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

相关概念

图论、连通分量、强连通分量相关概念,可以从其他博客中复习:
https://blog.csdn.net/weixin_50564032/article/details/123289611
https://zhuanlan.zhihu.com/p/37792015

有向图计算连通分量示例

测试环境参考:https://blog.csdn.net/liqian_ken/article/details/138544718

主要测试代码:

      // 创建有向邻接图,使用string类型作为顶点、边的唯一标识var graph = new AdjacencyGraph<string, Edge<string>>(true);// 添加顶点到图中graph.AddVertex("A");graph.AddVertex("B");graph.AddVertex("D");graph.AddVertex("C");graph.AddVertex("E");graph.AddVertex("F");graph.AddVertex("G");graph.AddVertex("H");// 创建边var a_b = new Edge<string>("A", "B");var a_c = new Edge<string>("A", "C");var d_e = new Edge<string>("D", "E");var e_f = new Edge<string>("E", "F");var g_h = new Edge<string>("G", "H");// 添加边到图中graph.AddEdge(a_b);graph.AddEdge(a_c);graph.AddEdge(d_e);graph.AddEdge(e_f);graph.AddEdge(g_h);var components = new Dictionary<string, int>();var cnt = graph.WeaklyConnectedComponents(components);Trace.WriteLine($"共有{cnt}个连通分量。");foreach (var pair in components.GroupBy(x => x.Value)){var str = string.Join(" ", pair.ToArray().Select(x => x.Key));Trace.WriteLine($"第{pair.Key + 1}个连通分量包含结点:{str}");}

打印输出结果:

共有3个连通分量。
第1个连通分量包含结点:A B C
第2个连通分量包含结点:D E F
第3个连通分量包含结点:G H

图结构示意:
在这里插入图片描述

无向图计算连通分量示例

在上述代码基础上替换一个类UndirectedGraph和一个方法ConnectedComponents

var graph = new UndirectedGraph<string, Edge<string>>(true);...var cnt = graph.ConnectedComponents(components);

这篇关于【QuikGraph】C#调用第三方库计算有向图、无向图的连通分量的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/990476

相关文章

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

一分钟带你上手Python调用DeepSeek的API

《一分钟带你上手Python调用DeepSeek的API》最近DeepSeek非常火,作为一枚对前言技术非常关注的程序员来说,自然都想对接DeepSeek的API来体验一把,下面小编就来为大家介绍一下... 目录前言免费体验API-Key申请首次调用API基本概念最小单元推理模型智能体自定义界面总结前言最

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

redis防止短信恶意调用的实现

《redis防止短信恶意调用的实现》本文主要介绍了在场景登录或注册接口中使用短信验证码时遇到的恶意调用问题,并通过使用Redis分布式锁来解决,具有一定的参考价值,感兴趣的可以了解一下... 目录1.场景2.排查3.解决方案3.1 Redis锁实现3.2 方法调用1.场景登录或注册接口中,使用短信验证码场

C#从XmlDocument提取完整字符串的方法

《C#从XmlDocument提取完整字符串的方法》文章介绍了两种生成格式化XML字符串的方法,方法一使用`XmlDocument`的`OuterXml`属性,但输出的XML字符串不带格式,可读性差,... 方法1:通过XMLDocument的OuterXml属性,见XmlDocument类该方法获得的xm

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同