Dijkstra 路径规划 C#
示例无向图如下:(起始点为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#相关推荐
- Dijkstra 路径规划算法在二维仿真环境中的应用 -- Python代码实现
在上一节中,介绍了 Dijkstra 算法的原理以及在图中的应用,这一节将一步步实现 Dijkstra 路径规划算法在二维环境中的路径规划,来进一步加深对 Dijkstra 算法的理解. 所需要用到的 ...
- Dijkstra 路径规划算法原理详解及 Python 代码实现
荷兰数学家 E.W.Dijkstra 于 1959 年提出了 Dijkstra 算法,它是一种适用于 非负权值 网络的 单源最短路径算法,同时也是目前求解最短路径问题的理论上最完备.应用最广的经典算法 ...
- 3 移动机器人路径规划(1- 栅格地图绘制)
1 栅格地图绘制 1.1 数据地图 1.1.1地图类型 1.1.2 栅格地图表示方式 1.2 位置的表示方法的区分 1.2.1 在栅格地图上绘制xy点发生的情况 1.2.2 三种表述位置方法的关系 1 ...
- 基于Dijkstra算法的武汉地铁路径规划!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:牧小熊,华中农业大学,Datawhale原创作者 前言 最近爬取了 ...
- 【路径规划】Dijkstra算法——超详细原理图解
Dijkstra算法详解 1. Dijkstra算法原理 1.1. 有向图的Dijkstra算法 1.2. 无向图和栅格网络的拓展 1.2.1. 无向图 1.2.2. 栅格网络 2. Di ...
- 基于Dijkstra算法的武汉地铁路径规划!(附下载)
来源:Datawhale 本文约3300字,建议阅读10分钟 本文为你详解路径规划项目,附源码链接. 前言 最近爬取了武汉地铁线路的信息,通过调用高德地图的api 获得各个站点的进度和纬度信息,使用D ...
- 【爬虫、算法】基于Dijkstra算法的武汉地铁路径规划!
作者:牧小熊,华中农业大学,Datawhale原创作者 前言 最近爬取了武汉地铁线路的信息,通过调用高德地图的api 获得各个站点的进度和纬度信息,使用Dijkstra算法对路径进行规划. 1.数据爬 ...
- 基于dijsktra算法的最短路径求解_基于dijkstra算法的AGV路径规划(含C++代码)
文字&代码来源: @Wasabi喵喵喵 基于dijkstra算法的AGV路径规划 dijkstra算法的路径规划 经典Dijkstra算法是一种贪心算法,根据路径长度递增次序找到最短路径,通常 ...
- Robotics: Computational Motion Planning(路径规划)笔记(一):基于图搜索的方法-Grassfire、Dijkstra和A*算法
在本课程中,我们将考虑机器人如何决定如何到达目标的问题.这个问题通常被称为运动规划,它以不同的方式来描述不同的情况.您将学习一些解决这个问题的最常用方法,包括基于图的方法.基于采样的方法和人工势场法. ...
- 合肥市出行地铁路径规划——基于Dijkstra算法
合肥市出行地铁路径规划--基于Dijkstra算法 1. 引言 2. 导入相应的模块 3. 申请高德地图的API 4. 获取合肥地铁数据 5. 计算合肥各地铁站点之间的距离 6.寻找最近的地铁站 7. ...
最新文章
- linux 文件IO与内存映射:内存映射
- LeetCode 86. 分隔链表 中等难度
- BugkuCTF-Misc:眼见非实(ISCCCTF)
- php二维数组json,php如何将二维数组转为json数据
- CVE-2009-3459
- APL开发日志--2013-01-17
- 痞子衡嵌入式:单片机AI的春天已来,ARM Cortex-M55发布了
- 全国计算机等级考证管理系统,猎证全国计算机等级考试学习系统
- LEFT OUTER JOIN
- Oracle instr用法
- 拓端tecdat|R语言用Rcpp加速Metropolis-Hastings抽样估计贝叶斯逻辑回归模型的参数
- 长文解读:迟到的Libra与即将到来的Commodity 2.0
- 软件测试——图书管理系统的测试计划书
- 小米平板2刷android,小米平板2怎么刷回MIUI 小米平板2刷回MIUI教程
- 将apk和所需库文件编译打包到system/priv-app路径下
- IOS11更新教程大分享(附带降级教程)
- 姜烧猪肉+日式厚蛋烧+蚝油青笋
- MW6208U盘量产问题
- 计算机快捷键m是什么,电脑常用快捷键有哪些
- C语言程序设计:猜数游戏
热门文章
- java服务器访问html_浏览器输入服务器端口号来访问html网页
- innerhtml有值但是页面上无显示_西门子PLCS7-1200用户自定义Web页面制作
- gin -get请求的小示例2-Handle处理post请求
- concurrenthashmap为什么是线程安全_为什么 StringBuilder 不是线程安全的?
- win10平板模式_电脑也能当平板用?并可以轻松实现分屏
- 清华大学开源用于网络嵌入的工具包 OpenNE
- 图像处理之局部二值特征
- [C/C++] C/C++延伸学习系列之STL及Boost库概述
- mongoDB的基本使用----飞天博客
- jQuery、Ajax,DataTable数据如何转换成Json格式