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 OutputStringBuilder 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();}}
}

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

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

相关文章

【分布式微服务专题】从单体到分布式(一、SpringCloud项目初步升级)

目录 前言阅读对象阅读导航前置知识笔记正文一、单体服务介绍二、服务拆分三、分布式微服务升级前的思考3.1 关于SpringBoot/SpringCloud的思考【有点门槛】 四、SpringCloud升级整合4.1 新建父子项目 学习总结感谢 前言 从本节课开始&#xff0c;我将自己手写一个基于SpringC…

如何轻松恢复 Windows 中删除的文件夹

我们都曾经历过这样的事&#xff0c;而且我们中的大多数人可能很快就会再次这样做。我们讨论的是在 Windows 中按“Delete”或“ShiftDelete”键意外删除重要文件夹的情况。 如果您刚刚按下删除键且未超过 30 天&#xff0c;或者尚未清空回收站&#xff0c;则可以恢复文件夹。…

操作系统学习笔记---内存管理

目录 概念 功能 内存空间的分配和回收 地址转换 逻辑地址&#xff08;相对地址&#xff09; 物理地址&#xff08;绝对地址&#xff09; 内存空间的扩充 内存共享 存储保护 方式 源程序变为可执行程序步骤 链接方式 装入方式 覆盖 交换 连续分配管理方式 单一连…

python安装与工具PyCharm

摘要&#xff1a; 周末闲来无事学习一下python&#xff01;不是你菜鸡&#xff0c;只不过是对手太强了&#xff01;所以你要不断努力&#xff0c;去追求更高的未来&#xff01;下面先了解python与环境的安装与工具的配置&#xff01; python安装&#xff1a; 官网 进入官网下载…

git 关于分支、merge、commit提交

最近开始用git终端提交代码&#xff0c;梳理了一些知识点 一 关于分支 关于分支&#xff0c;git的分支分为本地分支远程分支两种分支&#xff0c;在上传代码时&#xff0c;我们要确保当前本地分支连接了一个远程分支。 我们可以通过下面代码查看当前的本地分支&#xff1a; g…

迅为3588开发板 sudo: 无法解析主机:/DNS配置

环境申明 RK3588 ubuntu 22.04 jammy 迅为开发板 hostname 看是否有Host .&#xff0c;如果没有&#xff0c; sudo vim /etc/hostname在里面加一行&#xff0c;我这就这一个 iTOP-RK3588hosts 修改本地hosts sudo vim /etc/hosts127.0.0.1 localhost localhost iTOP-RK3…

2.postman环境变量及接口关联

一、环境变量以及全局变量 操作流程 1.点击environment 2.点击environment右侧号&#xff0c;新增环境变量 3.在变量中输入变量名以及变量值 4.回到collection页面&#xff0c;修改变量环境 5.在collection中通过{{变量名}}调用变量 变量定义 环境变量&#xff1a;环境变量…

vue 限制在指定容器内可拖拽的div

<template><div class"container" id"container"><div class"drag-box center" v-drag v-if"isShowDrag"><div>无法拖拽出容器的div浮窗</div></div></div> </template><script&g…

P11 Linux进程编程exec族函数

前言 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《Linux C应用编程&#xff08;概念类&#xff09;_ChenPi的博客-CSDN博客》✨✨✨ &#x1f525; 推荐专栏2: 《C_ChenPi的博客-CSDN博客》✨✨✨ &#x1f6f8;推荐专栏3: ​​​​​​《链表_C…

Java 简易版 UDP 多人聊天室

服务端 import java.io.*; import java.net.*; import java.util.ArrayList; public class Server{public static ServerSocket server_socket;public static ArrayList<Socket> socketListnew ArrayList<Socket>(); public static void main(String []args){try{…

算法通关村第五关—LRU的设计与实现(黄金)

LRU的设计与实现 一、理解LRU的原理 LeetCode146:运用你所掌握的数据结构&#xff0c;设计和实现一个LRU(最近最少使用)缓存机制 实现LRUCache类&#xff1a; LRUCache(int capacity) 以正整数作为容量capacity初始化 LRU 缓存 int get(int key) 如果关键字key存在于缓存中&a…

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

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

Nginx服务优化以及防盗链

1. 隐藏版本号 以在 CentOS 中使用命令 curl -I http://192.168.66.10 显示响应报文首部信息。 查看版本号 curl -I http://192.168.66.10 1. 修改配置文件 vim /usr/local/nginx/conf/nginx.conf http {include mime.types;default_type application/octet-stream;…

京东数据运营(京东API接口):10月投影仪店铺数据分析

鲸参谋监测的京东平台10月份投影仪市场销售数据已出炉&#xff01; 10月份&#xff0c;环同比来看&#xff0c;投影仪市场销售均上涨。鲸参谋数据显示&#xff0c;今年10月&#xff0c;京东平台投影仪的销量为16万&#xff0c;环比增长约22%&#xff0c;同比增长约8%&#xff1…

鸿蒙应用开发ArkTS基础组件的使用

语雀知识库地址&#xff1a;语雀HarmonyOS知识库 飞书知识库地址&#xff1a;飞书HarmonyOS知识库 本文示例代码地址&#xff1a;Gitee 仓库地址 嗨&#xff0c;各位好呀&#xff0c;我是小白 上一篇文章我为大家介绍了如何使用 ArkTS 开发鸿蒙应用&#xff0c;对 HarmonyOS 项…

探索开源游戏的乐趣与无限可能 | 开源专题 No.47

CleverRaven/Cataclysm-DDA Stars: 9.0k License: NOASSERTION Cataclysm&#xff1a;Dark Days Ahead 是一个回合制的生存游戏&#xff0c;设定在一个后启示录世界中。尽管有些人将其描述为 “僵尸游戏”&#xff0c;但 Cataclysm 远不止于此。在这个残酷、持久、程序生成的世…

【原创】【一类问题的通法】【真题+李6卷6+李4卷4(+李6卷5)分析】合同矩阵A B有PTAP=B,求可逆阵P的策略

【铺垫】二次型做的变换与相应二次型矩阵的对应&#xff1a;二次型f&#xff08;x1&#xff0c;x2&#xff0c;x3&#xff09;xTAx&#xff0c;g&#xff08;y1&#xff0c;y2&#xff0c;y3&#xff09;yTBy ①若f在可逆变换xPy下化为g&#xff0c;即P为可逆阵&#xff0c;有P…

数字系统设计(EDA)实验报告【出租车计价器】

一、问题描述 题目九&#xff1a;出租车计价器设计&#xff08;平台实现&#xff09;★★ 完成简易出租车计价器设计&#xff0c;选做停车等待计价功能。 1、基本功能&#xff1a; &#xff08;1&#xff09;起步8元/3km&#xff0c;此后2元/km&#xff1b; &#xff08;2…

红队攻防实战之ThinkPHP-RCE集锦

你若不勇敢&#xff0c;谁又可以替你坚强&#xff1f; ThinkPHP 2.x RCE漏洞 1、查询phpinfo() 2、任意代码执行 3、Getshell 蚁剑连接&#xff1a; ThinkPHP5 5.0.23 RCE漏洞 发送数据包&#xff1a; 成功执行id命令&#xff1a; 工具验证 ThinkPHP5 SQL注入漏洞 &&am…

什么是神经网络的非线性

大家好啊&#xff0c;我是董董灿。 最近在写《计算机视觉入门与调优》&#xff08;右键&#xff0c;在新窗口中打开链接&#xff09;的小册&#xff0c;其中一部分说到激活函数的时候&#xff0c;谈到了神经网络的非线性问题。 今天就一起来看看&#xff0c;为什么神经网络需…