Dijkstra 路径规划 C#
示例无向图如下:(起始点为v0)

邻接矩阵为:

注意:其中没有连接的边和自己到自己的点权值用10000表示。
代码:
static void Main(string[] args)
{
int[,] graph = new int[,] { { , , , , , }, { , , , , , }, { , , , , , }, { , , , , , }, { , , , , , }, { , , , , , } };
int n = 6;
int[] S = new int[n]; //最短路径的顶点集合 string[] mid = new string[n];//点的路线
for (int i = ; i < n; i++)
{
S[i] = ;
mid[i] = "";
}
ShortestPathByDijkstra(n, graph, S, mid);
} public static int IsContain(int m,int[] S)//判断该顶点是否已经计算过
{
int index = -;
for (int i = ; i < ; 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-; f > ; f--)
{
//置为初始值
min = ;
next = ;//第一行最小的元素所在的列 next点
//找出第一行最小的列值
for (int j = ; j < n; j++)//循环第0行的列
{
if ((IsContain(j,S) == -) && (graph[, j] < min))//不在S中,找出第一行最小的元素所在的列
{
min = graph[, j];
next = j;
}
}
//将下一个点加入S
S[next] = next;
if (min == )
{
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 = ; j < n; j++)//循环第0行的列
{
if (IsContain(j,S) == -)//初始化除包含在S中的
{
if ((graph[next, j] + min) < graph[, j])//如果小于原来的值就替换
{
graph[, 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
Dijkstra 路径规划 C#的更多相关文章
- 全局路径规划算法Dijkstra(迪杰斯特拉算法)- matlab
参考博客链接:https://www.cnblogs.com/kex1n/p/4178782.html Dijkstra是常用的全局路径规划算法,其本质上是一个最短路径寻优算法.算法的详细介绍参考上述 ...
- 机器人路径规划其一 Dijkstra Algorithm【附动态图源码】
首先要说明的是,机器人路径规划与轨迹规划属于两个不同的概念,一般而言,轨迹规划针对的对象为机器人末端坐标系或者某个关节的位置速度加速度在时域的规划,常用的方法为多项式样条插值,梯形轨迹等等,而路径规划 ...
- 【BZOJ-3627】路径规划 分层图 + Dijkstra + spfa
3627: [JLOI2014]路径规划 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 186 Solved: 70[Submit][Status] ...
- 基于谷歌地图的Dijkstra算法水路路径规划
最终效果图如下: 还是图.邻接表,可以模拟出几个对象=>节点.边.路径.三个类分别如下: Node 节点: using System; using System.Collections.Gene ...
- ROS探索总结(十四)——move_base(路径规划)
在上一篇的博客中,我们一起学习了ROS定位于导航的总体框架,这一篇我们主要研究其中最重要的move_base包. 在总体框架图中可以看到,move_base提供了ROS导航的配置.运行.交互接口,它主 ...
- 游戏AI之路径规划(3)
目录 使用路径点(Way Point)作为节点 洪水填充算法创建路径点 使用导航网(Navigation Mesh)作为节点 区域分割 预计算 路径查询表 路径成本查询表 寻路的改进 平均帧运算 路径 ...
- move_base的全局路径规划代码研究
algorithmn parameter code 主要是以下三个函数 计算所有的可行点 怎么计算一个点的可行点 从可行点中计算路径path todo algorithmn 算法的解释 Dijkstr ...
- ROS源码解读(二)--全局路径规划
博客转载自:https://blog.csdn.net/xmy306538517/article/details/79032324 ROS中,机器人全局路径规划默认使用的是navfn包 ,move_b ...
- ROS机器人路径规划介绍--全局规划
ROS机器人路径规划算法主要包括2个部分:1)全局路径规划算法:2)局部路径规划算法: 一.全局路径规划 global planner ROS 的navigation官方功能包提供了三种全局路径规划器 ...
随机推荐
- 自顶向下归并排序(Merge Sort)
一.自顶向下的归并排序思路: 1.先把数组分为两个部分. 2.分别对这两个部分进行排序. 3.排序完之后,将这两个数组归并为一个有序的数组. 重复1-3步骤,直到数组的大小为1,则直接返回. 这个思路 ...
- Mysql Java 驱动安装
怎么安装MYSQL的JDBC驱动 1.下载mysql for jdbc driver. http://dev.mysql.com/downloads/connector/j/5.0.html 2.解压 ...
- getline()函数详解 (2013-03-26 17:19:58)
学习C++的同学可能都会遇到一个getline()函数,譬如在C++premer中,标准string类型第二小节就是“用getline读取整行文本”.书上给的程序如下: int main() { ...
- python MLP 神经网络使用 MinMaxScaler 没有 StandardScaler效果好
MLP 64,2 preprocessing.MinMaxScaler().fit(X) test confusion_matrix:[[ ...
- Python编程-一个小爬虫工具的实现过程
需求描述: 1,打开网站: 2,获取网站的文件内容: 3,返回保存到文件中: 这里的就用到了多线程的方法 import requests,threading,time def write_html(u ...
- python TypeError: 'NoneType' object is not iterable
list(set(map(lambda tp_id : tp_id if not ('#' in tp_id) and len(tp_id.strip().replace('\n', '')) > ...
- 用Rem来无脑还原Web移动端自适应的页面
(function (win,doc){ if (!win.addEventListener) return; var html=document.documentElement; function ...
- codeforces914G Sum the Fibonacci
题目大意:给定一个长为$n$($n\leq 10^6$)的序列S,定义一个合法的五元组$(a,b,c,d,e)$合法当且仅当 $$ ( S_a \mid S_b ) and S_c and ( S_d ...
- Gym 101142 I.Integral Polygons(计算几何)
题意:给定一个凸包,现在让你连接凸包上两点,把凸包变为两个多边形,满足两个多边形的面积都是整数. 思路:我们知道整点的三角形面积S=叉积/2,则S要么是整数,要么是整数+0.5.那么多边形有多个三角形 ...
- UML图之例图
用例图主要说明的是谁要使用系统,以及他们使用该系统可以做些什么,帮助开发团队以一种可视化的方式理解系统的功能需求. 一个用例图包含了多个模型元素,如系统.参与者和用例,并且显示这些元素之间的各种关系, ...