示例无向图如下:(起始点为v0)

邻接矩阵为:

注意:其中没有连接的边和自己到自己的点权值用10000表示。

代码:

static void Main(string[] args)
{  int[,] graph = new int[,] { { 10000, 10000, 10, 10000, 30, 100 }, { 10000, 10000, 5, 10000, 10000, 10000 }, { 10, 5, 10000, 50, 10000, 10000 }, { 10000, 10000, 50, 10000, 10000, 10 }, { 30, 10000, 10000, 20, 10000, 60 }, { 100, 10000, 10000, 10, 60, 10000 } };  int n = 6;  int[] S = new int[n]; //最短路径的顶点集合string[] mid = new string[n];//点的路线for (int i = 0; i < n; i++){S[i] = 0;mid[i] = "";}ShortestPathByDijkstra(n, graph, S, mid);}public static int IsContain(int m,int[] S)//判断该顶点是否已经计算过
{int index = -1;for (int i = 1; i < 6; i++){if (S[i] == m){index = i;}}return index;
}

/// <summary>
/// Dijkstrah实现最短路算法
/// </summary>
static void ShortestPathByDijkstra(int n,int[,] graph, int[] S, string[] mid)
{int min;int next;for (int f = n-1; f > 0; f--){//置为初始值min = 1000;next = 0;//第一行最小的元素所在的列 next点//找出第一行最小的列值for (int j = 1; j < n; j++)//循环第0行的列{if ((IsContain(j,S) == -1) && (graph[0, j] < min))//不在S中,找出第一行最小的元素所在的列{min = graph[0, j];next = j;}}//将下一个点加入SS[next] = next;if (min == 1000){Console.WriteLine("V0到V{0}的最短路径为:无", next);}else{Console.WriteLine("V0到V{0}的最短路径为:{1},路径为:V0{2}->V{0}", next, min, mid[next]);}// 重新初始0行所有列值for (int j = 1; j < n; j++)//循环第0行的列{if (IsContain(j,S) == -1)//初始化除包含在S中的{if ((graph[next, j] + min) < graph[0, j])//如果小于原来的值就替换
            {graph[0, j] = graph[next, j] + min;mid[j] = mid[next] + "->V" + next;//记录过程点}}}}
}

结果

  

解析:

  分三部分,主函数中给出图中的初始邻接矩阵,顶点个数。以及初始化最短路径的顶点集合和点路线集合。

  IsContain(int m,int[] S)这个函数是在每次循环的时候判断该点是否已经在最短路径集合中,即已经遍历过。

  接下来就是Dijkstra算法,大致步骤如下:

    1、添加初始顶点v0在集合S中,遍历第一行,找最小的权值所在的顶点列值j。

    2、将j值做为下一个点加入集合S中,输出此时到达j点的最小路径。

    3、重新初始化第一行的值,通过判断加入某点后graph[next][j]+min是否小于graph[0, j](其中j不在集合S中),若是则替换后者,并记录此过程 mid[j] = mid[next] + "->V" + next;

    4、循环1、2、3步骤顶点数-1次。

  

详细参考:https://blog.csdn.net/qq_25954259/article/details/78289335?locationNum=5&fps=1

转载于:https://www.cnblogs.com/s-c-x/p/10045368.html

Dijkstra 路径规划 C#相关推荐

  1. Dijkstra 路径规划算法在二维仿真环境中的应用 -- Python代码实现

    在上一节中,介绍了 Dijkstra 算法的原理以及在图中的应用,这一节将一步步实现 Dijkstra 路径规划算法在二维环境中的路径规划,来进一步加深对 Dijkstra 算法的理解. 所需要用到的 ...

  2. Dijkstra 路径规划算法原理详解及 Python 代码实现

    荷兰数学家 E.W.Dijkstra 于 1959 年提出了 Dijkstra 算法,它是一种适用于 非负权值 网络的 单源最短路径算法,同时也是目前求解最短路径问题的理论上最完备.应用最广的经典算法 ...

  3. 3 移动机器人路径规划(1- 栅格地图绘制)

    1 栅格地图绘制 1.1 数据地图 1.1.1地图类型 1.1.2 栅格地图表示方式 1.2 位置的表示方法的区分 1.2.1 在栅格地图上绘制xy点发生的情况 1.2.2 三种表述位置方法的关系 1 ...

  4. 基于Dijkstra算法的武汉地铁路径规划!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:牧小熊,华中农业大学,Datawhale原创作者 前言 最近爬取了 ...

  5. 【路径规划】Dijkstra算法——超详细原理图解

    Dijkstra算法详解 1. Dijkstra算法原理  1.1. 有向图的Dijkstra算法  1.2. 无向图和栅格网络的拓展   1.2.1. 无向图   1.2.2. 栅格网络 2. Di ...

  6. 基于Dijkstra算法的武汉地铁路径规划!(附下载)

    来源:Datawhale 本文约3300字,建议阅读10分钟 本文为你详解路径规划项目,附源码链接. 前言 最近爬取了武汉地铁线路的信息,通过调用高德地图的api 获得各个站点的进度和纬度信息,使用D ...

  7. 【爬虫、算法】基于Dijkstra算法的武汉地铁路径规划!

    作者:牧小熊,华中农业大学,Datawhale原创作者 前言 最近爬取了武汉地铁线路的信息,通过调用高德地图的api 获得各个站点的进度和纬度信息,使用Dijkstra算法对路径进行规划. 1.数据爬 ...

  8. 基于dijsktra算法的最短路径求解_基于dijkstra算法的AGV路径规划(含C++代码)

    文字&代码来源: @Wasabi喵喵喵 基于dijkstra算法的AGV路径规划 dijkstra算法的路径规划 经典Dijkstra算法是一种贪心算法,根据路径长度递增次序找到最短路径,通常 ...

  9. Robotics: Computational Motion Planning(路径规划)笔记(一):基于图搜索的方法-Grassfire、Dijkstra和A*算法

    在本课程中,我们将考虑机器人如何决定如何到达目标的问题.这个问题通常被称为运动规划,它以不同的方式来描述不同的情况.您将学习一些解决这个问题的最常用方法,包括基于图的方法.基于采样的方法和人工势场法. ...

  10. 合肥市出行地铁路径规划——基于Dijkstra算法

    合肥市出行地铁路径规划--基于Dijkstra算法 1. 引言 2. 导入相应的模块 3. 申请高德地图的API 4. 获取合肥地铁数据 5. 计算合肥各地铁站点之间的距离 6.寻找最近的地铁站 7. ...

最新文章

  1. linux 文件IO与内存映射:内存映射
  2. LeetCode 86. 分隔链表 中等难度
  3. BugkuCTF-Misc:眼见非实(ISCCCTF)
  4. php二维数组json,php如何将二维数组转为json数据
  5. CVE-2009-3459
  6. APL开发日志--2013-01-17
  7. 痞子衡嵌入式:单片机AI的春天已来,ARM Cortex-M55发布了
  8. 全国计算机等级考证管理系统,猎证全国计算机等级考试学习系统
  9. LEFT OUTER JOIN
  10. Oracle instr用法
  11. 拓端tecdat|R语言用Rcpp加速Metropolis-Hastings抽样估计贝叶斯逻辑回归模型的参数
  12. 长文解读:迟到的Libra与即将到来的Commodity 2.0
  13. 软件测试——图书管理系统的测试计划书
  14. 小米平板2刷android,小米平板2怎么刷回MIUI 小米平板2刷回MIUI教程
  15. 将apk和所需库文件编译打包到system/priv-app路径下
  16. IOS11更新教程大分享(附带降级教程)
  17. 姜烧猪肉+日式厚蛋烧+蚝油青笋
  18. MW6208U盘量产问题
  19. 计算机快捷键m是什么,电脑常用快捷键有哪些
  20. C语言程序设计:猜数游戏

热门文章

  1. java服务器访问html_浏览器输入服务器端口号来访问html网页
  2. innerhtml有值但是页面上无显示_西门子PLCS7-1200用户自定义Web页面制作
  3. gin -get请求的小示例2-Handle处理post请求
  4. concurrenthashmap为什么是线程安全_为什么 StringBuilder 不是线程安全的?
  5. win10平板模式_电脑也能当平板用?并可以轻松实现分屏
  6. 清华大学开源用于网络嵌入的工具包 OpenNE
  7. 图像处理之局部二值特征
  8. [C/C++] C/C++延伸学习系列之STL及Boost库概述
  9. mongoDB的基本使用----飞天博客
  10. jQuery、Ajax,DataTable数据如何转换成Json格式