最短路径算法——迪杰斯特拉(Dijkstra)
算法思想
- 设G=(V,E)是一个带权有向图
- 把图中顶点集合V分成两组
- 第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径 , 就将加入到集合S中,直到全部顶点都加入到S中,算法就结束了)
- 第二组为其余未确定最短路径的顶点集合(用U表示)
- 按最短路径长度的递增次序依次把第二组的顶点加入S中
- 在加入的过程中,总保持从源点v到S中各顶点的最短路径长度不大于从源点v到U中任何顶点的最短路径长度
- 此外,每个顶点对应一个距离,S中的顶点的距离就是从源点v到此顶点的最短路径长度
- U中的顶点的距离,是从源点v到此顶点只包括S中的顶点为中间顶点的当前最短路径长度
C语言伪代码描述的迪杰斯特拉算法
void ShortestPath_DIJ( MGraph G, int v0, PathMatrix &P, ShortPathTable &D){// 用Dijkstra算法求有向网G的v0顶点到其余顶点v的最短路径P[v]及其带权长度D[v]。// 若P[v][w]为TRUE,则w是从v0到v当前求得最短路径上的顶点。// final[v]为TRUE当且仅当v∈S,即已经求得从v0到v的最短路径。for (v = 0; v < G.vexnum; ++ v){final[v] = FALSE; D[v] = G.arcs[v0][v];for (w = 0; w < G.vexnum; ++ ww) P[v][w] = FALSE;// 设空路径if (D[v] < INFINITY) {P[v][v0] = TRUE; P[v][v] = TRUE;}}// forD[v0] = 0; final[v0] = TRUE;// 初始化,v0顶点属于S集// 开始主循环,每次求得v0到某个v顶点的最短路径,并加v到S集for (i = 1; i < G.vexnum; ++ i) {// 其余G.vexnum - 1个顶点min = INFINITY;// 当前所知离v0顶点的最近距离for (w = 0; w < G.vexnum; ++ w)if(!final[w])// w顶点在V-S中if(D[w] < min) {v = w; min = D[w];}// w顶点离v0顶点更近final[v] = TRUE;// 离v0顶点最近的v加入S集for(w = 0; w < G.vexnum; ++ w)// 更新当前最短路径及距离if(!final[w] && (min + G.arcs[v][w] < D[w])){// 修改D[w]和P[w],x∈V-SD[w] = min + G.arcs[v][w];P[w] = P[v]; P[w][w] = TRUE;// P[w] = P[v] + P[w]}// if}// for}// ShortestPath_DIJ
C语言程序描述的算法
void Dijkstra(float cost[][n], int v){// 求源点v到其余顶点的最短路径及其长度,cost为有向网的带权邻接矩阵// 设max值为32767,代表一个很大的数v1 = v - 1;for(i = 0; i < n; i ++){dist[i] = cost[v1][i];// 初始化distif(dist[i] < max) pre[i] = v; else pre[i] = 0;}pre[v1] = 0;for(i = 0; i < n; i ++) S[i] = 0;// 第一组开始为空集S[v1] = 1;// 源点v并入第一组for(i = 0; i < n; i ++){// 扩充第一组min = max;for(j = 0; j < n; j ++)if(!S[j] && (dist[j] < min)) {min = dist[j]; k = j;}S[k] = 1;// 将k+1加入第一组for(j = 0; j < n; j ++)if(!S[j] && (dist[j] > dist[k] + cost[k][j])){// 修正第二组各顶点的距离值disk[j] = disk[k] + cost[k][j]; pre[j] = k + 1;// k + 1是j + 1的前趋}// 所有顶点均已扩充到S中for(j = 0; j < n; j ++){// 打印结果printf("%f\n%d", dist[i], i + 1);p = pre[i];while(p != 0){// 继续找前趋顶点printf("<--%d", p);p = pre[p - 1];}}}// Dijkstra}
最短路径算法——迪杰斯特拉(Dijkstra)相关推荐
- 最短路径算法-迪杰斯特拉(Dijkstra)算法
最短路径算法-迪杰斯特拉(Dijkstra)算法 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先遍历思 ...
- 最短路径算法 迪杰斯特拉、佛洛依德和贝尔曼
最短路径算法 迪杰斯特拉算法 佛洛依德算法 迪杰斯特拉算法 迪杰斯特拉算法用来解决在有向有权图中某一个点到任意一点的最短路径问题. 注意:只能用来解决权为非零的情况,不能够解决权为负数的情况 思想:我 ...
- 数据结构与算法(7-4)最短路径(迪杰斯特拉(Dijkstra)算法、弗洛伊德(Floyd)算法)
目录 一.最短路径概念 二.迪杰斯特拉(Dijkstra)算法(单源最短路径) 1.原理 2.过程 3.代码 三.弗洛伊德(Floyd)算法(多源最短路径) 1.原理 2.存储 3.遍历 4.代码 参 ...
- java数据结构和算法——迪杰斯特拉(Dijkstra)算法
目录 一.迪杰斯特拉(Dijkstra)算法介绍 二.迪杰斯特拉(Dijkstra)算法过程 三.迪杰斯特拉(Dijkstra)算法--应用场景(最短路径问题) 四.迪杰斯特拉(Dijkstra)算法 ...
- 最短路径之迪杰斯特拉(Dijkstra)算法
定义 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题.迪杰斯特拉算法 ...
- 最短路径算法-迪杰斯特拉(Dijkstra)
迪杰斯特拉(Dijkstra) 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法.一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径 ...
- 最短路径:迪杰斯特拉(Dijkstra)算法图解
Dijkstra算法可以求解带权图中最短路径. 算法思想:将所有节点分为两个区域,已知区域和未知区域.最开始的时候,将起点加入到已知区域,其他点加入未知区域,比较已知区域到未知区域的所有连线,最短的路 ...
- Java 图的最短路径问题-迪杰斯特拉算法VS弗洛伊德算法
1.迪杰斯特拉算法VS弗洛伊德算法 迪杰斯特拉算法通过选定的被访问顶点,求出从出发访问顶点到其他顶点的最短路径: 弗洛伊德算法中每一个顶点都是出发访问点,所以需要将每一个顶点看做被访问顶点,求出从每一 ...
- 059.迪杰斯特拉(Dijkstra)算法的原理以及解决最短路径问题
1. 迪杰斯特拉(Dijkstra)算法的原理 1.1. 算法应用场景-最短路径问题 1.2. 基本介绍 1.3. 步骤详解 1.4. 思路解析 1.5. 图解步骤 2. 迪杰斯特拉(Dijkstra ...
最新文章
- android h5弹窗,Android嵌套html5页面中alert 弹出框问题
- 实现数组字符串翻转的两种方法
- go语言实现排序算法
- jQuery on()方法绑定动态元素的点击事件无效
- 地线与接地螺丝_电气接地规范与接地的各项参数
- 浅谈Web前端安全策略xss和csrf,及又该如何预防?
- SDH光端机市场应用及发展趋势介绍
- explain分析SQL查询
- python应用:爬虫框架Scrapy系统学习第三篇——初识scrapy
- Go语言基础进阶—程序结构—变量
- XenApp / XenDesktop 7.6 初体验一 安装, 配置站点和序列号服务器
- 现代通信原理7.1:模拟角度调制的基本概念
- pycharm破解版下载(可用)
- html-菜鸟--书架仿饿了么首页—Html学习(1)
- 苹果手机怎么连接不了无线网络连接服务器,苹果手机连接wifi显示无互联网连接怎么办?...
- printf打印二进制数据
- 杰理之微信语音前2S声音小修改【篇】
- PC ACCESS 测试客户机出现错误 win7 64位
- 网络的分类(计算机网络)
- 报表设计工具FastReport Online Designer V2022.1新功能全剖析
热门文章
- 华为已经没落的一个手机系列 无人问津甚至有点多余
- 测试过程线上问题的定位分析问题处理总结
- gitblit无法启动服务
- coreboot学习6:ramstage阶段之芯片初始化流程
- k近邻法的实现(kd树)-相关问题梳理
- Selenium+requests出现窗口不能跳转的情况
- Write operations are not allowed in read-only mode (FlushMode.MANUAL)
- 清华镜像站 python_使用清华、豆瓣镜像源下载tensorflow
- 安卓 background的图片随着textview的大小而改变_关于CSS中的背景属性background简述...
- 【Kafka】kafka方式消息不丢失的一些参数设置