这里需要详细说明参数,v表示第一个顶点,dist[i]表示从v到各个顶点vi的最短路径长度,path[]保存的是最短路径上一个顶点的位置,它其实就像一棵树,保存的是双亲节点的,遍历的时候可以按照双亲节点的遍历思想。具体思想请参见课本。

先看一下遍历path:

void PrintPath(int path[],int v)  //v为顶点v,也就是打印根节点(也就是第一个节点)到顶点V的路径
{//path数组装的是从v到上一个节点的路径,用栈把它倒置一下int stack[maxsize],top = -1;while(path[v] != -1){stack[++top] = v;v = path[v];}stack[++top] = v;while(top != -1)printf("%d->",stack[top--]);
}

下面是关键代码:

typedef struct
{int no;char info;
} VexType;
typedef struct
{int edges[maxsize][maxsize];int n,int e;VexType vex[maxsize];
} MGraph;
void Djkstra(MGraph g,int v,int dist[],int path[])
{int set[maxsize];int min,u;for(int i = 0; i<g.n; i++) //进行初始化{if(g.edges[v][i] < maxsize){dist[i] = g.edges[v][i];path[i] = v;set[i] = 0;}elsepath[i] = -1;}// 初始化完成set[v] = 1;path[v] = -1;for(int j = 0; j<g.n-1; j++) //从剩余顶点中找出到这个顶点,通往这个顶点在通往所有剩余顶点的路径中长度最短{min = INF;if(set[j] == 0 && dist[j] < min){min = dist[j];u = j;}set[u] = 1;}for(int k = 0; k<g.n; k++) //u点加入后会不会使得通往顶点k的路径更短{if(set[k] == 0 && dist[k] > dist[u]+g.edges[u][k]){dist[k] = dist[u]+g.edges[u][k];path[k] = u;}}
}

最后说明一点,它的时间复杂度为O(n2次方)
prim算法和kruskal算法是针对无向图,其中prim算法适用于稠密图,而kruskal适用于稀疏图。

Dijkstra Algorithm (迪杰斯特拉算法)相关推荐

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

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

  2. 【Java】迪杰斯特拉算法

    Dijkstra's algorithm 迪杰斯特拉算法,也名迪克斯特拉算法,用以解决有向带权图的最佳路径问题. 注意:图中不可有负权!否则不可使用此算法! 本实现用到的数据结构有三. 有向带权图gr ...

  3. 迪杰斯特拉算法(Dijkstra‘s algorithm)以及示例

    迪杰斯特拉算法(Dijkstra's algorithm)是一种非常重要且有价值的算法.它被广泛应用于计算图中单源最短路径问题,在交通路线规划.网络路由.作业调度等领域有着广泛的应用. 迪杰斯特拉算法 ...

  4. Dijkstra迪杰斯特拉算法 C++实现

    本篇文章主要介绍了Dijkstra迪杰斯特拉算法的C++实现,文章包含两个部分,在第一部分中我会简单介绍迪杰斯特拉算法以及一些个人的理解,第二部分会对C++代码的逻辑进行解释.下面是我已经上传的代码资 ...

  5. 迪杰斯特拉算法实现-Dijkstra 简单版

    迪杰斯特拉算法实现单源最短路 使用了 邻接表来存放图的信息,使用了优先级队列. #include <iostream> #include<queue> #include< ...

  6. JavaScript实现dijkstra迪杰斯特拉算法(附完整源码)

    JavaScript实现dijkstra迪杰斯特拉算法 PriorityQueue完整源代码 MinHeap.js完整源代码 Heap.js完整源代码 Comparator.js完整源代码 dijks ...

  7. C++实现Dijkstra(迪杰斯特拉)算法(附完整源码)

    C++Dijkstra迪杰斯特拉算法的实现 C++Dijkstra(迪杰斯特拉)算法的完整源码(定义,实现,main函数测试) C++Dijkstra(迪杰斯特拉)算法的完整源码(定义,实现,main ...

  8. C语言实现Dijkstra(迪杰斯特拉)算法(附完整源码)

    Dijkstra迪杰斯特拉 Graph结构体定义 迪杰斯特拉算法完整源码(定义,实现,main函数测试) Graph结构体定义 struct Graph {int vertexNum;int **ed ...

  9. dijkstra算法_最短路径问题——迪杰斯特拉算法(Dijkstra)

    假期过长,导致停更了好长时间,复习一道算法题找找感觉. 前段时间看到一篇文章,里面提到了统治世界的十大算法,其中之一就是迪杰斯特拉算法(Dijkstra),该算法主要解决的"最短路径&quo ...

最新文章

  1. ICML 2021论文数据分析:谷歌第一,国内北大论文最多
  2. java提高篇(八)----详解内部类
  3. 系统部署常见问题汇总
  4. Docker(三):镜像导入与导出、保存与加载、在Docker容器中安装软件
  5. kinect2的标定
  6. spider-抓取网页内容(Beautiful soup)
  7. 2020 年百度之星·程序设计大赛 - 复赛 1002 Binary Addition
  8. 关于使用FMDB往数据库里插入空字符串@后,再读出来是什么东西的问题
  9. ant-design-vue 的颜色选择器
  10. 贝叶斯分类器(贝叶斯决策论,极大似然估计,朴素贝叶斯分类器,半朴素贝叶斯分类器,贝叶斯网)学习笔记
  11. 台式机通过笔记本的WIFI上网
  12. 安卓手机加密_安卓手机的万能加密插件 oversec
  13. (专升本)PowerPnt(PowerPoint 2010的其他功能)
  14. vue echarts 中国地图实现用户分布
  15. python 从大图中找小图
  16. ios开发所需图片尺寸汇总
  17. 淘宝评价显示及记分规则
  18. 防抖节流的实现与区分(详解带代码)
  19. 免费手机上网的方法,比GPRS网速快很多(好东西与大家分亨)
  20. 计算机组成与系统结构课程设计

热门文章

  1. 结对编程 贪吃蛇项目-开发环境搭建过程
  2. wampserver服务器无法启动(图标颜色不对)
  3. 企业局域网内如何跨网安全传输数据
  4. jQuery模拟下拉框单选框复选Select,Checkbox,Radio
  5. IIS负载均衡-Application Request Route详解第二篇:创建与配置Server Farm(转载)
  6. 运维工程师必备之负载均衡集群及LVS详解
  7. [总结]SqlServer中如何实现自动备份数据!
  8. 个推基于Docker和Kubernetes的微服务实践
  9. 四个修改Docker默认存储位置的方法
  10. CentOS下调整VolGroup-lv_root分区大小