C#,图算法——以邻接节点表示的图最短路径的迪杰斯特拉(Dijkstra)算法C#程序

1 文本格式

using System;
using System.Text;
using System.Linq;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm
{
    public class Node  // : IComparable<Node>
    {
        private int vertex, weight;
        public Node(int v, int w)
        {
            vertex = v;
            weight = w;
        }
        public int getVertex() { return vertex; }
        public int getWeight() { return weight; }
        public int CompareTo(Node other)
        {
            return weight - other.weight;
        }
    }

    public class Dijkstra_Algorithm
    {
        // Function to find the shortest distance of all the
        // vertices from the source vertex S.
        public static int[] dijkstra(int V, List<List<Node>> graph, int src)
        {
            int[] distance = new int[V];
            for (int i = 0; i < V; i++)
            {
                distance[i] = Int32.MaxValue;
            }
            distance[src] = 0;

            SortedSet<Node> pq = new SortedSet<Node>();
            pq.Add(new Node(src, 0));

            while (pq.Count > 0)
            {
                Node current = pq.First();
                pq.Remove(current);

                foreach (Node n in graph[current.getVertex()])
                {
                    if (distance[current.getVertex()] + n.getWeight() < distance[n.getVertex()])
                    {
                        distance[n.getVertex()] = n.getWeight() + distance[current.getVertex()];
                        pq.Add(new Node(n.getVertex(), distance[n.getVertex()]));
                    }
                }
            }
            // If you want to calculate distance from source to
            // a particular target, you can return
            // distance[target]
            return distance;
        }

        public static string Drive()
        {
            int V = 9;
            List<List<Node>> graph = new List<List<Node>>();
            for (int i = 0; i < V; i++)
            {
                graph.Add(new List<Node>());
            }
            int source = 0;
            graph[0].Add(new Node(1, 4));
            graph[0].Add(new Node(7, 8));
            graph[1].Add(new Node(2, 8));
            graph[1].Add(new Node(7, 11));
            graph[1].Add(new Node(0, 7));
            graph[2].Add(new Node(1, 8));
            graph[2].Add(new Node(3, 7));
            graph[2].Add(new Node(8, 2));
            graph[2].Add(new Node(5, 4));
            graph[3].Add(new Node(2, 7));
            graph[3].Add(new Node(4, 9));
            graph[3].Add(new Node(5, 14));
            graph[4].Add(new Node(3, 9));
            graph[4].Add(new Node(5, 10));
            graph[5].Add(new Node(4, 10));
            graph[5].Add(new Node(6, 2));
            graph[6].Add(new Node(5, 2));
            graph[6].Add(new Node(7, 1));
            graph[6].Add(new Node(8, 6));
            graph[7].Add(new Node(0, 8));
            graph[7].Add(new Node(1, 11));
            graph[7].Add(new Node(6, 1));
            graph[7].Add(new Node(8, 7));
            graph[8].Add(new Node(2, 2));
            graph[8].Add(new Node(6, 6));
            graph[8].Add(new Node(7, 1));

            int[] distance = dijkstra(V, graph, source);
            // Printing the Output
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("Vertex " + " Distance from Source");
            for (int i = 0; i < V; i++)
            {
                sb.AppendLine(i + "\t" + distance[i]);
            }
            return sb.ToString();
        }
    }
}
 

2 代码格式

using System;
using System.Text;
using System.Linq;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm
{
	public class Node
	{
		private int vertex, weight;
		public Node(int v, int w)
		{
			vertex = v;
			weight = w;
		}
		public int getVertex() { return vertex; }
		public int getWeight() { return weight; }
		public int CompareTo(Node other)
		{
			return weight - other.weight;
		}
	}

	public class Dijkstra_Algorithm
	{
		// Function to find the shortest distance of all the
		// vertices from the source vertex S.
		public static int[] dijkstra(int V, List<List<Node>> graph, int src)
		{
			int[] distance = new int[V];
			for (int i = 0; i < V; i++)
			{
				distance[i] = Int32.MaxValue;
			}
			distance[src] = 0;

			SortedSet<Node> pq = new SortedSet<Node>();
			pq.Add(new Node(src, 0));

			while (pq.Count > 0)
			{
				Node current = pq.First();
				pq.Remove(current);

				foreach (Node n in graph[current.getVertex()])
				{
					if (distance[current.getVertex()] + n.getWeight() < distance[n.getVertex()])
					{
						distance[n.getVertex()] = n.getWeight() + distance[current.getVertex()];
						pq.Add(new Node(n.getVertex(), distance[n.getVertex()]));
					}
				}
			}
			// If you want to calculate distance from source to
			// a particular target, you can return
			// distance[target]
			return distance;
		}

		public static string Drive()
		{
			int V = 9;
			List<List<Node>> graph = new List<List<Node>>();
			for (int i = 0; i < V; i++)
			{
				graph.Add(new List<Node>());
			}
			int source = 0;
			graph[0].Add(new Node(1, 4));
			graph[0].Add(new Node(7, 8));
			graph[1].Add(new Node(2, 8));
			graph[1].Add(new Node(7, 11));
			graph[1].Add(new Node(0, 7));
			graph[2].Add(new Node(1, 8));
			graph[2].Add(new Node(3, 7));
			graph[2].Add(new Node(8, 2));
			graph[2].Add(new Node(5, 4));
			graph[3].Add(new Node(2, 7));
			graph[3].Add(new Node(4, 9));
			graph[3].Add(new Node(5, 14));
			graph[4].Add(new Node(3, 9));
			graph[4].Add(new Node(5, 10));
			graph[5].Add(new Node(4, 10));
			graph[5].Add(new Node(6, 2));
			graph[6].Add(new Node(5, 2));
			graph[6].Add(new Node(7, 1));
			graph[6].Add(new Node(8, 6));
			graph[7].Add(new Node(0, 8));
			graph[7].Add(new Node(1, 11));
			graph[7].Add(new Node(6, 1));
			graph[7].Add(new Node(8, 7));
			graph[8].Add(new Node(2, 2));
			graph[8].Add(new Node(6, 6));
			graph[8].Add(new Node(7, 1));

			int[] distance = dijkstra(V, graph, source);
			// Printing the Output
			StringBuilder sb = new StringBuilder();
			sb.AppendLine("Vertex " + " Distance from Source");
			for (int i = 0; i < V; i++)
			{
				sb.AppendLine(i + "\t" + distance[i]);
			}
			return sb.ToString();
		}
	}
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CNN发展史脉络 概述图整理

CNN发展史脉络概述图整理&#xff0c;学习心得&#xff0c;供参考&#xff0c;错误请批评指正。 相关论文&#xff1a; LeNet&#xff1a;Handwritten Digit Recognition with a Back-Propagation Network&#xff1b; Gradient-Based Learning Applied to Document Recogniti…

【工具使用-JFlash】如何使用Jflash擦除和读取MCU内部指定扇区的数据

一&#xff0c;简介 在调试的过程中&#xff0c;特别是在调试向MCU内部flash写数据的时候&#xff0c;我们常常要擦除数据区的内容&#xff0c;而不想擦除程序取。那这种情况就需要擦除指定的扇区数据即可。本文介绍一种方法&#xff0c;可以擦除MCU内部Flash中指定扇区的数据…

【小沐学Python】Python实现TTS文本转语音(speech、pyttsx3、百度AI)

文章目录 1、简介2、Windows语音2.1 简介2.2 安装2.3 代码 3、pyttsx33.1 简介3.2 安装3.3 代码 4、ggts4.1 简介4.2 安装4.3 代码 5、pywin326、百度AI7、百度飞桨结语 1、简介 TTS(Text To Speech) 译为从文本到语音&#xff0c;TTS是人工智能AI的一个模组&#xff0c;是人机…

【linux】yum安装时: Couldn‘t resolve host name for XXXXX

yum 安装 sysstat 报错了&#xff1a; Kylin Linux Advanced Server 10 - Os 0.0 B/s | 0 B 00:00 Errors during downloading metadata for repository ks10-adv-os:- Curl error (6): Couldnt resolve host nam…

【摸鱼向】利用Arduino实现自动化切屏

曾几何时&#xff0c;每次背着老妈打游戏的时候都要紧张兮兮地听着爸妈是不是会破门而入&#xff0c;这严重影响了游戏体验&#xff0c;因此&#xff0c;最近想到了用Arduino加上红外传感器来实现自动监测的功能&#xff0c;当有人靠近门口的时候&#xff0c;电脑可以自动执行预…

【文件上传系列】No.2 秒传(原生前端 + Node 后端)

上一篇文章 【文件上传系列】No.1 大文件分片、进度图展示&#xff08;原生前端 Node 后端 & Koa&#xff09; 秒传效果展示 秒传思路 整理的思路是&#xff1a;根据文件的二进制内容生成 Hash 值&#xff0c;然后去服务器里找&#xff0c;如果找到了&#xff0c;说明已经…

pytorch:YOLOV1的pytorch实现

pytorch&#xff1a;YOLOV1的pytorch实现 注&#xff1a;本篇仅为学习记录、学习笔记&#xff0c;请谨慎参考&#xff0c;如果有错误请评论指出。 参考&#xff1a; 动手学习深度学习pytorch版——从零开始实现YOLOv1 目标检测模型YOLO-V1损失函数详解 3.1 YOLO系列理论合集(Y…

【IDEA】解决mac版IDEA,进行单元测试时控制台不能输入问题

我的IDEA版本 编辑VM配置 //增加如下配置&#xff0c;重启IDEA -Deditable.java.test.consoletrue测试效果

风力发电对讲 IP语音对讲终端IP安防一键呼叫对讲 医院对讲终端SV-6005网络音频终端

风力发电对讲 IP语音对讲终端IP安防一键呼叫对讲 医院对讲终端SV-6005网络音频终端 目 录 1、产品规格 2、接口使用 2.1、侧面接口功能 2.2、背面接口功能 2.3、面板接口功能 3、功能使用 1、产品规格 输入电源&#xff1a; 12V&#xff5e;24V的直流电源 网络接口&am…

初级数据结构(二)——链表

文中代码源文件已上传&#xff1a;数据结构源码 <-上一篇 初级数据结构&#xff08;一&#xff09;——顺序表 | NULL 下一篇-> 1、链表特征 与顺序表数据连续存放不同&#xff0c;链表中每个数据是分开存放的&#xff0c;而且存放的位置尤其零散&#…

C# WPF上位机开发(会员管理软件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 好多同学都认为上位机只是纯软件开发&#xff0c;不涉及到硬件设备&#xff0c;比如听听音乐、看看电影、写写小的应用等等。如果是消费电子&#…

人工智能从 DeepMind 到 ChatGPT ,从 2012 - 2024

本心、输入输出、结果 文章目录 人工智能从 DeepMind 到 ChatGPT &#xff0c;从 2012 - 2024前言2010年&#xff1a;DeepMind诞生2012&#xff5e;2013年&#xff1a;谷歌重视AI发展&#xff0c;“拿下”Hinton2013&#xff5e;2014年&#xff1a;谷歌收购DeepMind2013年&…

调用别人提供的接口无法通过try catch捕获异常(C#),见鬼了

前几天做CA签名这个需求时发现一个很诡异的事情&#xff0c;CA签名调用的接口是由另外一个开发部门的同事(比较难沟通的那种人)封装并提供到我们这边的。我们这边只需要把数据准备好&#xff0c;然后调他封装的接口即可完成签名操作。但在测试过程中&#xff0c;发现他提供的接…

2024年网络安全竞赛-数字取证调查attack817

​ 数字取证调查 (一)拓扑图 服务器场景:FTPServer20221010(关闭链接) 服务器场景操作系统:未知 FTP用户名:attack817密码:attack817 分析attack.pcapng数据包文件,通过分析数据包attack.pcapng找出恶意用户第一次访问HTTP服务的数据包是第几号,将该号数作为Flag值…

力扣刷题总结 字符串(2)【KMP】

&#x1f525;博客主页&#xff1a; A_SHOWY&#x1f3a5;系列专栏&#xff1a;力扣刷题总结录 数据结构 云计算 数字图像处理 28.找出字符串中第一个匹配项的下标mid经典KMP4593重复的子字符串mid可以使用滑动窗口或者KMP KMP章节难度较大&#xff0c;需要深入理解其中…

Uncaught SyntaxError: Unexpected end of input (at manage.html:1:21) 的一个解

关于Uncaught SyntaxError: Unexpected end of input (at manage.html:1:21)的一个解 问题复现 <button onclick"deleteItem(${order.id},hire,"Orders")" >delete</button>报错 原因 函数参数的双引号和外面的双引号混淆了&#xff0c;改成…

数据可视化|jupyter notebook运行pyecharts,无法正常显示“可视化图形”,怎么解决?

前言 本文是该专栏的第39篇,后面会持续分享python数据分析的干货知识,记得关注。 相信有些同学在本地使用jupyter notebook运行pyecharts的时候,在代码没有任何异常的情况下,无论是html还是notebook区域,都无法显示“可视化图形”,界面区域只有空白一片。遇到这种情况,…

精选Axure原型设计模板,RP原型组件库(PC端移动端元件库及Axure函数及运算符说明)

好的原型组件会大大的提高产品经理的工作效率&#xff0c;小7在陆续整理、精选Axure 8的原型设计模板&#xff0c;包含了原型设计的常用元素和AxureRP 8函数及运算符的说明文档&#xff0c;及各种设备模板框架。 本文也是基于小7另一篇文章的补充&#xff0c;更多更详细的资料…

ffprobe命令行超详细使用详解

本文做为阅读ffprobe源码的前课程。为了之后方便理解ffprobe的源码,咱们先从ffprobe的命令学习。 课程内容如下: 文章目录 一、ffprobe主要选项说明1、每次使用ffprobe都打印编译环境的信息,太烦了2、如何分析媒体文件中存在的流信息3、如何指定查询某路流信息4、查看输入文…

2020年第九届数学建模国际赛小美赛B题血氧饱和度的变异性解题全过程文档及程序

2020年第九届数学建模国际赛小美赛 B题 血氧饱和度的变异性 原题再现&#xff1a; 脉搏血氧饱和度是监测患者血氧饱和度的常规方法。在连续监测期间&#xff0c;我们希望能够使用模型描述血氧饱和度的模式。   我们有36名受试者的数据&#xff0c;每个受试者以1 Hz的频率连…