思路:

在网络中,从某个顶点Vx出发到达另外一个顶点Vi,往往有多条路径,其中,边的权值之和最小的路径称为最短路径,并称Vx为这条最短路径的源点,Vi为终点。

显然,边最少的路径不一定是最短路径。

求网络中从指定源点到其余各顶点的最短路径的问题,通常称为单源最短路径问题。

迪杰斯拉特方法:

当n个顶点的有向网络和源点都给定以后,如何求得该源点到其余各顶点的最短路径?

迪杰斯拉特提出了一个解决此问题的简单方法,即按最短路径长度由小到大的次序,逐步求得每一条最短路径。

迪杰斯拉特算法中三个辅助数组的作用:

1、d[i]记录从源点Vx到顶点Vi的“当前最短的”路径长度值

2、path[i]记录从源点Vx到顶点Vi的"当前最短的"路径上倒数第二个顶点的序号

3、s[i]=true表示从源点Vx到顶点Vi的最短路径已最终确定;s[i]=false表示源点Vx到顶点Vi的最短路径尚未最终确定。

算法key process:

初始化,确定第i条最短路径的终点,修正源点到其余各顶点的最短路径。直到全部确定完毕为止

代码:

//迪杰斯特拉算法
template <class T>
void ExtMGraph<T>::Dijkstra(int v,T* d,int* path)
{int i,k,w; if (v<0||v>n-1) {cout<< “OutOfBounds”;  return;}bool *s=new bool[n]; for (i=0;i<n;i++){s[i]=false; d[i]=a[v][i];if (i!=v && d[i]<INFTY) path[i]=v;else path[i]=-1;}
s[v]=true; //d[v]=0; for (i=1;i<n;i++){//确定第i条最短路径的终点序号kk=Choose(d,s);s[k]=true;  //修正源点到其余各顶点的最短路径      for (w=0; w<n; w++)             if (!s[w] && d[k]+a[k][w]< d[w]){     d[w]=d[k]+a[k][w]; path[w]=k;}}
}
template <class T>
int ExtMGraph<T>::Choose(int* d, bool* s)
{int i,minpos; T min;min=INFTY; minpos=-1;for (i=1;i<n;i++)if (d[i]<min &&!s[i]){min=d[i];minpos=i;}return minpos;
}

算法分析:

-上述算法的执行时间为O(n^2);

-如果只希望求从源点到某一特定顶点之间的最短路径,也需要与求单源最短路径相同的时间复杂度O(n^2)

单源最短路径-迪杰斯拉特算法相关推荐

  1. 贪心算法单源点最短路径例题c语言源代码,Dijkstra算法是解单源最短路径问题的一个贪心算法...

    问题描述 给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数. 另外,还给定 V 中的一个项点,称为源. 现在我们要计算从源到所有其他各项点的最短路径长度. 这里的长度是指路上各边权之 ...

  2. 简单介绍迪杰斯拉Dijkstra算法步骤

    将所有顶点分成两个集合, 一个是已选顶点集合,一个是未选顶点集合.并通过不断更新三个列表结点信息,实现这两个集合间的不断转化.第一个列表(Nodes Visited)存储结点是否已被访问的信息,已被访 ...

  3. 图论-单源最短路径算法(拓扑,Dijkstra,Floyd,SPFA)

    前言 单源最短路径是学习图论算法的入门级台阶,但刚开始看的时候就蒙了,什么有环没环,有负权没负权,下面就来总结一下求单源最短路径的所有算法以及其适用的情况. 单源最短路径 设定图中一个点为源点,求其他 ...

  4. 算法导论-上课笔记11:单源最短路径

    文章目录 0 前言 0.1 最短路径的几个变体 0.2 最短路径的最优子结构 0.3 负权重的边 0.4 环路 0.5 最短路径的表示 0.6 松弛操作 0.7 最短路径和松弛操作的性质 1 Bell ...

  5. c语言单源最短路径问题实验报告,数据结构课程设计最短路径问题实验报告-20210320182652.docx-原创力文档...

    IMB standardization office[IMB 5AB- IMBK 08- IMB 2C] IMB standardization office[IMB 5AB- IMBK 08- IM ...

  6. NYOJ有趣的问题(单源最短路径dijkstra)

    思路:这题的难度主要是在建图上,建完图之后就是求单源最短路径问题.可用dijkstra算法.要注意他给出的墙的x坐标不是有序 的. #include<stdio.h> #include&l ...

  7. 最短路径——迪杰斯坷垃算法(有向图、单源最短路径)

    最短路径的算法有两种:迪杰斯坷垃算法和弗洛伊德算法. 但是两种算法各有优劣: 迪杰斯坷垃算法适合单源点最短路径的获取, 弗洛伊德算法适合各点间最短路径的获取,即多源点最短路径的获取: 今天主要讲解迪杰 ...

  8. 单源最短路径-Dijkstra(迪杰斯特拉算法)

    迪杰斯特拉算法时间复杂度为O(n^2),其中n为顶点个数. 该算法用于求单源最短路径.并且图中的边不允许带负权值. #include <iostream> using namespace ...

  9. 单源最短路径之迪杰斯特拉算法(C语言)

    Dijkstra(迪杰斯特拉)算法 采用广度优先搜索思想,对有向赋权图寻找最短路径. 该算法对于不含负权的有向图来说,是目前已知的最快的单源最短路径算法. 时间复杂度:O(n^2) 基本原理:不断为为 ...

最新文章

  1. 数据蒋堂 | 非常规聚合
  2. C语言基础总结Part
  3. C++根据系统时间生成不重复的随机数
  4. uwp post php,window_Win10开发系列专题五 UWP应用添加画布及语音输入支持,这是微软Win10十个开发系列专 - phpStudy...
  5. 雷林鹏分享:Lua 面向对象
  6. Windowstelnet服务怎么开启 Win11telnet服务怎么开启详细介绍
  7. puppet经典应用
  8. Python中如何清空Queue?
  9. 深入理解@Lazy注解
  10. 注塑成型缺陷熔接痕产生原因及解决方案
  11. ORACLE局域网连接
  12. Cocos2d-Html5--打怪升级之路
  13. java简易日历表_java简易日历代码
  14. C#毕业设计——基于C#+asp.net+sqlserver的汽车修理厂物资流通管理系统设计与实现(毕业论文+程序源码)——物资流通管理系统
  15. 《那些年啊,那些事——一个程序员的奋斗史》——41
  16. 网站被攻击如何查找木马文件 以及攻击者IP
  17. 跨境电商如何解决供应链物流效率、交付等重点问题
  18. C++中的char,char*,char[]
  19. 论文投稿必看,审稿人意见互相矛盾,作者该怎么办?
  20. 基于MATLAB的路面裂缝检测识别算法仿真

热门文章

  1. 有关libpcap和snort的
  2. 基于模型参考自适应的永磁同步电机参数辨识模型
  3. 黑马day06_regex collection-app
  4. 大学重要证书排名和大学生应当常去的十大网,,,学习者都应该收集啊。
  5. gorm的Raw与scan
  6. shoeBox超实用的雪碧图(Sprite)图制作工具-使用shoeBox
  7. 计算机通信及网络工程考研方向,信息与通信工程考研方向
  8. 卷积神经网络英文文献,卷积神经网络 英语
  9. Windows下Redis安装和使用
  10. 刨根问底U3D---从Profile中窥探Unity的内存管理