数据结构最短路径PPT教学课件
合集下载
《最短路径算法》课件
《最短路径算法》PPT课 件
探索最短路径算法的奥秘,了解其在各领域中的应用,以及选择最佳算法的 依据,展望最短路径算法的未来。
最短路径算法简介
最短路径问题的定义和最短路径算法的广泛应用。
单源最短路径算法
1
贝尔曼-福德算法2 Nhomakorabea算法思想:通过利用松弛操作,逐步更新节 点之间的最短路径。
算法步骤:进行N-1次松弛操作,其中N为节 点数,再进行一次检查负权边。
电路板布线
通过最短路径算法规划电路板 上元件的布线路径,减小电路 的延迟,提高性能。
应用最短路径算法的问题探讨
1 负权边问题
2 负环问题
遇到边权值为负数的情况,部分最短路径算法需 要特殊处理。
当图中存在负权环时,部分最短路径算法无法得 到准确的最短路径。
最短路径算法总结
1 各种算法的优劣
不同最短路径算法在不同场景下有不同的优劣,需要根据具体情况进行选择。
算法复杂度分析:时间复杂度为O(V*E),V 为节点数,E为边数。
迪杰斯特拉算法
算法思想:通过记录已知最短路径和待确认 节点,逐步更新最短路径。
算法步骤:从起点出发,不断更新最短路径, 直到所有节点都被确认为最短路径。
算法复杂度分析:时间复杂度为O(V^2),V 为节点数。
多源最短路径算法
1
弗洛伊德算法
算法思想:通过动态规划,逐步更新节点间 的最短路径。
算法步骤:利用矩阵记录节点间最短路径, 逐步更新矩阵,得到所有节点的最短路径。
算法复杂度分析:时间复杂度为O(V^3),V为 节点数。
最短路径算法的应用实例
地图导航
使用最短路径算法规划最佳行 驶路线,提供准确的导航指引。
网络路由
探索最短路径算法的奥秘,了解其在各领域中的应用,以及选择最佳算法的 依据,展望最短路径算法的未来。
最短路径算法简介
最短路径问题的定义和最短路径算法的广泛应用。
单源最短路径算法
1
贝尔曼-福德算法2 Nhomakorabea算法思想:通过利用松弛操作,逐步更新节 点之间的最短路径。
算法步骤:进行N-1次松弛操作,其中N为节 点数,再进行一次检查负权边。
电路板布线
通过最短路径算法规划电路板 上元件的布线路径,减小电路 的延迟,提高性能。
应用最短路径算法的问题探讨
1 负权边问题
2 负环问题
遇到边权值为负数的情况,部分最短路径算法需 要特殊处理。
当图中存在负权环时,部分最短路径算法无法得 到准确的最短路径。
最短路径算法总结
1 各种算法的优劣
不同最短路径算法在不同场景下有不同的优劣,需要根据具体情况进行选择。
算法复杂度分析:时间复杂度为O(V*E),V 为节点数,E为边数。
迪杰斯特拉算法
算法思想:通过记录已知最短路径和待确认 节点,逐步更新最短路径。
算法步骤:从起点出发,不断更新最短路径, 直到所有节点都被确认为最短路径。
算法复杂度分析:时间复杂度为O(V^2),V 为节点数。
多源最短路径算法
1
弗洛伊德算法
算法思想:通过动态规划,逐步更新节点间 的最短路径。
算法步骤:利用矩阵记录节点间最短路径, 逐步更新矩阵,得到所有节点的最短路径。
算法复杂度分析:时间复杂度为O(V^3),V为 节点数。
最短路径算法的应用实例
地图导航
使用最短路径算法规划最佳行 驶路线,提供准确的导航指引。
网络路由
数据结构第7章图4最短路径ppt课件30页PPT
vj
v2
v4
v3
v5
s
{v0,v2} {v0 ,v2 ,v4} {v0 ,v2 ,v4 ,v3} {v0 ,v2 ,v4 ,v3 ,v5}
S之外的当前最 短路径之顶点
(v0,v2)+ (v2,v3)<(v0,v3)
与最小生成树的不同点:路径是累加的!
§7.6 最短路径
所有顶点对之间的最短路径(Floyd算法)
V2
3
V1
2
-4 7
V5
6
4
V3
8
-5 1
V4
D4
12345 1 0 3 -1 4 -4 2 3 0 -4 1 -1 37 4 0 5 3 4 2 -1 -5 0 -2 58 5 1 6 0
P4
12345 1 nil 1 4 2 1 2 4 nil 4 2 1 3 4 3 nil 2 1 4 4 3 4 nil 1 5 4 3 4 5 nil
V2
3
V1
2
-4 7
V5
6
4
V3
8
-5 1
V4
D1
12345 1 0 3 8 ∞ -4 2∞0∞1 7 3∞4 0∞∞ 4 2 5 -5 0 -2 5∞∞∞6 0
P1
12345 1 nil 1 1 nil 1 2 nil nil nil 2 2 3 nil 3 nil nil nil 4 4 1 4 nil 1 5 nil nil nil 5 nil
E ① F→A:
24
② F→B→A: 5+18=23
5
6 18
9
12 15
③ F→B→C→A:5+7+9=21
数据结构:最短路径算法83页PPT
❖ 知识就是财富 ❖ 丰富你的人生
71、既然我已经踏上这条道路,那么,任何东西都不应妨碍我沿着这条路走下去。——康德 72、家庭成为快乐的种子在外也不致成为障碍物但在旅行之际却是夜间的伴侣。——西塞罗 73、坚持意志伟大的事业需要始终不渝的精神。——伏尔泰 74、路漫漫其修道远,吾将上下而求索。——屈原 75、内外相应,言行相称。——韩非
数据结构:最短路径算法
•
46、寓形宇内复几时,曷不委心任去 留。
•
47、采菊东篱下,悠然见南山。
•
48、啸傲东轩下,聊复得此生。
•
49、勤学如春起之苗,不见其增,日 有所长 。
•
50、环堵萧然,不蔽风日;短褐穿结 ,箪瓢 屡空, 晏如也 。
Байду номын сангаас 谢谢你的阅读
71、既然我已经踏上这条道路,那么,任何东西都不应妨碍我沿着这条路走下去。——康德 72、家庭成为快乐的种子在外也不致成为障碍物但在旅行之际却是夜间的伴侣。——西塞罗 73、坚持意志伟大的事业需要始终不渝的精神。——伏尔泰 74、路漫漫其修道远,吾将上下而求索。——屈原 75、内外相应,言行相称。——韩非
数据结构:最短路径算法
•
46、寓形宇内复几时,曷不委心任去 留。
•
47、采菊东篱下,悠然见南山。
•
48、啸傲东轩下,聊复得此生。
•
49、勤学如春起之苗,不见其增,日 有所长 。
•
50、环堵萧然,不蔽风日;短褐穿结 ,箪瓢 屡空, 晏如也 。
Байду номын сангаас 谢谢你的阅读
数据结构最短路径PPT教学课件
• void Dijkstra(MGraph *G,int v1,int n)
•{
•
int D2[MVNum],p2[MVNum];
•
int v,i,w,min;
•
enum boolean S[MVNum];
•
for(v=1;v<=n;v++)
•
S[v]=FALSE;
•
D2[v]=G->arcs[v1][v];
for(j=1;j<=n:j++)G->arcs[i][j]=Maxint;
•
printf("输入%d条边的i、j及w:\n",e);
•
for(k=1;k<=e;k++){
•
scanf("%d,%d,%d",&i,&j&w);
•
G->arcs[i][j]=w;
•
}printf("有向图的存储结构建立完毕!\n");
•
S[v]=TRUE;
•
for(w=1;w<=n;w++)
•
if(!S[w]&&(D2[v]+G->arcs[v][w]<D2[w])){
•
D2[w]=D2[v]+G->arcs[v][w];
•
p2[w]=v;
•
}
•}
• printf("路径长度 路径\n");
2020/12/11
7
费洛伊德算法
• (3)费洛伊德算法:
• 费洛伊德算法的思想:首先考虑路径<Vi,V1>和<V1,Vj>是否存 在。如果存在,则比较路径<Vi,Vj>和<Vi,V1,Vj>的路径长度, 取长度较短者为当前所求的最短路径。然后考虑从Vi到Vj是否含 有顶点V2为中间顶点的路径<Vi,…,V2…,Vj>,若没有,则其 最短路径为之前所求,若有,则<Vi,…,V2…,Vj>可以分解为 <Vi,…V2>和<V2,…,Vj>,而其为前一次找到的中间顶点序号不 大于一的最短路径,将两者相加记为路径长度,比较该长度与前 一次的中间顶点序号不大于一的,取其最短的作为当前求的从Vi 到Vj的中间顶点长度不大于二的最短路径,直到选出不大于N的 最短路径为止。
最短路径-课件
最短路径-课件
欢迎来到最短路径算法的课程!在这个课件中,我们将探索什么是最短路径 算法以及它在不同情景中的应用。让我们开始吧!
什么是最短路径算法
最短路径算法是用于在图或网络中找到两个节点之间最短路径的计算方法。它在许多领域中都有广泛的 应用,例如网络路由、GPS导航和运筹学问题。
Dijkstra算法及其原理
在生产和物流中优化资源分配和路径选择, 以最大限度地提高效率。
最短路径算法的时间复杂度分 析
不同的最短路径算法具有不同的时间复杂度,了解它们的性能特点可以帮助 选择适合特定问题的算法。
最短路径算法在实际中的性能 优化
根据具体问题的特点,可以对最短路径算法进行各种优化,以加快计算速度 和减少资源消耗。
Floyd-Warshall算法及其原理
Floyd-Warshall算法是一种用于找到图中所有节点之间最短路径的算法。它通 过动态规划的方法计算节点之间的最短路径,并允许负权边的存在。
SPFA算法及其原理
SPFA(Shortest Path Faster Algorithm)算法是一种用于在加权图中找到单源最 短路径的算法 快的运行时间。
最短路径问题的应用
交通网络设计中的最短路径问题
帮助规划城市道路网络,以最小化交通拥堵 和行驶距离。
GPS导航中的最短路径问题
帮助导航系统计算出到达目标地点的最短路 径,以提供准确的导航指引。
网络路由问题中的最短路径问题
帮助选择网络中数据包的最佳路径,以最小 化传输时间和延迟。
运筹学中的最短路径问题
最短路径问题的分类
单源最短路径问题
寻找某个节点到其余所有节点的最短路径。
源点集合限制的最短路径问题
在一组源节点中寻找到达目标节点的最短路 径。
欢迎来到最短路径算法的课程!在这个课件中,我们将探索什么是最短路径 算法以及它在不同情景中的应用。让我们开始吧!
什么是最短路径算法
最短路径算法是用于在图或网络中找到两个节点之间最短路径的计算方法。它在许多领域中都有广泛的 应用,例如网络路由、GPS导航和运筹学问题。
Dijkstra算法及其原理
在生产和物流中优化资源分配和路径选择, 以最大限度地提高效率。
最短路径算法的时间复杂度分 析
不同的最短路径算法具有不同的时间复杂度,了解它们的性能特点可以帮助 选择适合特定问题的算法。
最短路径算法在实际中的性能 优化
根据具体问题的特点,可以对最短路径算法进行各种优化,以加快计算速度 和减少资源消耗。
Floyd-Warshall算法及其原理
Floyd-Warshall算法是一种用于找到图中所有节点之间最短路径的算法。它通 过动态规划的方法计算节点之间的最短路径,并允许负权边的存在。
SPFA算法及其原理
SPFA(Shortest Path Faster Algorithm)算法是一种用于在加权图中找到单源最 短路径的算法 快的运行时间。
最短路径问题的应用
交通网络设计中的最短路径问题
帮助规划城市道路网络,以最小化交通拥堵 和行驶距离。
GPS导航中的最短路径问题
帮助导航系统计算出到达目标地点的最短路 径,以提供准确的导航指引。
网络路由问题中的最短路径问题
帮助选择网络中数据包的最佳路径,以最小 化传输时间和延迟。
运筹学中的最短路径问题
最短路径问题的分类
单源最短路径问题
寻找某个节点到其余所有节点的最短路径。
源点集合限制的最短路径问题
在一组源节点中寻找到达目标节点的最短路 径。
《最短路径问题》课件
参考文献
• 算法导论 • 计算机算法设计与分析 • 图解算法
《最短路径问题》PPT课 件
# 最短路径问题PPT课件
介绍最短路径问题的定义和概念,以及为什么最短路径问题在实际生活中很 重要。 同时,探讨最短路径问题的基本性质。
最短路径的求解
1
暴力算法
枚举所有路径并找到最短路径,但随着
Dijkstra算法
2
节点增多,复杂度呈指数级上升。
介绍算法的原理和步骤,通过不断更新
距离表找到最短路径。
3
Floyd算法
介绍算法的原理和步骤,通过动态规划 计算最短路径。
最短路径问题的应用
铁路、公路、航空、航 海
路线规划在交通行业中的重 要性和应用。
互联网中的路由算法
讲解互联网通信中使用的最 短路径算法。
生命科学领域的基因测 序和蛋白质分析
如何利用最短路径问题的变种
任意两点之间的最短路径问题
探讨在图中找到任意两点之间的最短路径。
带负权边的最短路径问题
介绍具有负权边的图中求解最短路径问题的方法。
一般图的最短路径问题
分析在一般图中求解最短路径的挑战和方法。
更多变种问题的介绍
介绍其他类型的最短路径问题及其应用。
总结
总结最短路径问题的基本概念,分析各种算法的优缺点及适用范围。 同时,展望最短路径问题的未来发展方向。
数据结构第19讲第7章(4)最短距离网络流精品PPT课件
10
2. 求每一对顶点之间的最短路径
有两种方法: 分别以图中的每个顶点为源点,
共需要n次调用迪杰斯特拉算法,时
间复杂度为O( n3) ;
另一种方法是弗洛伊德算法,
时间复杂度也是O( n3) ,但算法更简单;
11
弗洛伊德算法的基本思想:
从图的带权邻接矩阵G.arcs出发, 假设求顶点Vi到Vj的最短路径。如果从Vi,到 Vj有弧,则从Vi,到Vj存在一条长度为G.arcs[i][j] 的路径,但该路径是否一定是最短路径,还需 要进行n次试探。
c ( 1, 5, 1) = ∞
4
求从顶点1到顶点5的最短距离
1
4
2
34
5
2
1
5
32
43
路径长度为2:经过顶点1和2的从顶点1到顶点5的最短 距离。由于顶点2的加入,最短距离值可能(动态)改变, 或者仍然为c ( 1, 5, 1);或者为从顶点1到顶点2的距离加 上从顶点2到顶点5的距离之和;记为:
c(i,j,k ) = min {c(i,j,k-1), c(i,k,k-1) + c(k,j,k-1)}
当k=n时,c(i,j,k)为顶点i到顶点j的最短距离。
如何计算 c( i, j, n ) ?
1. 递归:终止条件为: c(i, j, 1 ) = A [ i, j ];
2. 迭代:初始条件为 c(i, j, 1 ) = A [ i, j ];
共执行 n2 次。
13
2. 第二次,再加一个顶点V2,如果(Vi, … , V2) 和
(V2, … , Vj)分别是当前找到的中间顶点序号不大于1
的最短路径,那么(Vi, … , V2, … , Vj )就有可能是从
2. 求每一对顶点之间的最短路径
有两种方法: 分别以图中的每个顶点为源点,
共需要n次调用迪杰斯特拉算法,时
间复杂度为O( n3) ;
另一种方法是弗洛伊德算法,
时间复杂度也是O( n3) ,但算法更简单;
11
弗洛伊德算法的基本思想:
从图的带权邻接矩阵G.arcs出发, 假设求顶点Vi到Vj的最短路径。如果从Vi,到 Vj有弧,则从Vi,到Vj存在一条长度为G.arcs[i][j] 的路径,但该路径是否一定是最短路径,还需 要进行n次试探。
c ( 1, 5, 1) = ∞
4
求从顶点1到顶点5的最短距离
1
4
2
34
5
2
1
5
32
43
路径长度为2:经过顶点1和2的从顶点1到顶点5的最短 距离。由于顶点2的加入,最短距离值可能(动态)改变, 或者仍然为c ( 1, 5, 1);或者为从顶点1到顶点2的距离加 上从顶点2到顶点5的距离之和;记为:
c(i,j,k ) = min {c(i,j,k-1), c(i,k,k-1) + c(k,j,k-1)}
当k=n时,c(i,j,k)为顶点i到顶点j的最短距离。
如何计算 c( i, j, n ) ?
1. 递归:终止条件为: c(i, j, 1 ) = A [ i, j ];
2. 迭代:初始条件为 c(i, j, 1 ) = A [ i, j ];
共执行 n2 次。
13
2. 第二次,再加一个顶点V2,如果(Vi, … , V2) 和
(V2, … , Vj)分别是当前找到的中间顶点序号不大于1
的最短路径,那么(Vi, … , V2, … , Vj )就有可能是从
数据结构Java版图3最短路径ppt课件
③ 修改: dist[i] ← min{ dist[i], dist[k] +
Edge[k][i] }, 对于每一个 i V- S ;
④ 判断:若 S = V, 则算法结束,否则转 ②。
6
Dijkstra算法中各辅助数组的最终结果
序号 顶点 1 顶点 2 顶点 3 顶点 4
Dist 10
50
30 60
•每次求得一条最短路径后, 其终点vk 加入集合S, 然后对所有的vi V-S,修改其 dist[i]值。
5
Dijkstra算法设计
① 初始化: S ← { v0 }; dist[j] ← Edge[0][j], j = 1, 2, …, n-1; // n为图中顶点个数
② 求出最短路径的长度: dist[k] ← min { dist[i] }, i V- S ; S ← S U { k };
•若从源点v0到顶点 vi 有边, 则dist[i]为该边上 的权值; •若从源点v0到顶点 vi 无边, 则dist[i]为 。
•假设 S 是已求得的最短路径的终点的集合,则可 证明:下一条最短路径必然是从v0 出发,中间只 经过 S 中的顶点便可到达的那些顶点vx (vxV-S ) 的路径中的一条。
源点 终点
最短路径
路径长度
v0 v1
(v0,v1)
10
v2
(v0,v1,v2) (v0,v3,v2) ,60,50
v3
(v0,v3)
30
v4 (v0,v4) (v0,v3,v4) (v0,v3,v2 ,v4) 100,90,60
4
•引入辅助数组dist。它的每一个分量dist[i]表示 当前找到的从源点 v0到终点 vi 的最短路径的长度。 初始状态:
Edge[k][i] }, 对于每一个 i V- S ;
④ 判断:若 S = V, 则算法结束,否则转 ②。
6
Dijkstra算法中各辅助数组的最终结果
序号 顶点 1 顶点 2 顶点 3 顶点 4
Dist 10
50
30 60
•每次求得一条最短路径后, 其终点vk 加入集合S, 然后对所有的vi V-S,修改其 dist[i]值。
5
Dijkstra算法设计
① 初始化: S ← { v0 }; dist[j] ← Edge[0][j], j = 1, 2, …, n-1; // n为图中顶点个数
② 求出最短路径的长度: dist[k] ← min { dist[i] }, i V- S ; S ← S U { k };
•若从源点v0到顶点 vi 有边, 则dist[i]为该边上 的权值; •若从源点v0到顶点 vi 无边, 则dist[i]为 。
•假设 S 是已求得的最短路径的终点的集合,则可 证明:下一条最短路径必然是从v0 出发,中间只 经过 S 中的顶点便可到达的那些顶点vx (vxV-S ) 的路径中的一条。
源点 终点
最短路径
路径长度
v0 v1
(v0,v1)
10
v2
(v0,v1,v2) (v0,v3,v2) ,60,50
v3
(v0,v3)
30
v4 (v0,v4) (v0,v3,v4) (v0,v3,v2 ,v4) 100,90,60
4
•引入辅助数组dist。它的每一个分量dist[i]表示 当前找到的从源点 v0到终点 vi 的最短路径的长度。 初始状态:
第8章图第8讲-最短路径和Dijkstra算法PPT课件
第2组为其余未求出最短路径的顶点集合(用U表示)。
S
每一步求出v到U中一个 U=V-S
顶点u的最短路径,并将u
移动到S中。直到U为空。
u
v
3/21
狄克斯特拉算法的过程
(1)初始化:,S只包含源点即S={v},v的最短路径为0。U包 含除v外的其他顶点,U中顶点i距离为边上的权值(若v与i有边<v, i>)或∞(若i不是v的出边邻接点)。
path[5]={0,2,3,5}。
?
所有n-1条最短路径可以用二维数组path[][]存储。
9/21
改进的方法是采用一维数组path来保存:
若从源点v j的最短路径如下:
v
…
a
…
v j最短路径中j的前一个顶点
u
j
则
v
…
a
…
? u 一定是从源点v u的最短路径
反证法证明:
b
是v u的最短路径
v
k
j
考虑中间其他所有顶点k,通过 比较得到v j的最短路径
8/21
算法设计(解决2个问题)
如何存放最短路径长度:
用一维数组dist[j]存储! 源点v默认, dist[j]表示源点 顶点j的最短路径长度。如 dist[2]=12表示源点 顶点2的最短路径长度为12。
如何存放最短路径:
从源点到其他顶点的最短路径有n-1条,一条最短路径用一 个一维数组表示,如从顶点0 5的最短路径为0、2、3、5, 表示为
v
…
a
…
u
j
而通过b的路径更短,则v → … a → … u → j不是最短路径
与假设矛盾,问题得到证明。
10
S
每一步求出v到U中一个 U=V-S
顶点u的最短路径,并将u
移动到S中。直到U为空。
u
v
3/21
狄克斯特拉算法的过程
(1)初始化:,S只包含源点即S={v},v的最短路径为0。U包 含除v外的其他顶点,U中顶点i距离为边上的权值(若v与i有边<v, i>)或∞(若i不是v的出边邻接点)。
path[5]={0,2,3,5}。
?
所有n-1条最短路径可以用二维数组path[][]存储。
9/21
改进的方法是采用一维数组path来保存:
若从源点v j的最短路径如下:
v
…
a
…
v j最短路径中j的前一个顶点
u
j
则
v
…
a
…
? u 一定是从源点v u的最短路径
反证法证明:
b
是v u的最短路径
v
k
j
考虑中间其他所有顶点k,通过 比较得到v j的最短路径
8/21
算法设计(解决2个问题)
如何存放最短路径长度:
用一维数组dist[j]存储! 源点v默认, dist[j]表示源点 顶点j的最短路径长度。如 dist[2]=12表示源点 顶点2的最短路径长度为12。
如何存放最短路径:
从源点到其他顶点的最短路径有n-1条,一条最短路径用一 个一维数组表示,如从顶点0 5的最短路径为0、2、3、5, 表示为
v
…
a
…
u
j
而通过b的路径更短,则v → … a → … u → j不是最短路径
与假设矛盾,问题得到证明。
10
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
•
}
•
for(k=1;k<=n;k++)
•
{
•
for(i=1;i<=n;i++)
•
for(j=1;j<=n;j++)
•
{
•
if(D[i][k]+D[k][j]<D[i][j]){
•
D[i][j]=D[i][k]+D[k][j];
•
p[i][j]=p[i][k];
• printf("dij=%d,pij=%d\n",D[i][j],p[i][j]);
•}
• for(i=1;i<=n;i++){
•
printf("%5d",D2[i]);
•
printf("%5d",i);v=p2[i];
•
while(v!=0){
•
printf("<-%d",v);
•
v=p2[v];
•
}
•
printf("\n");
•}
•}
2020/12/11
6
迪杰斯特拉算法
• (2)迪杰斯特拉算法:
•
if(D2[v]<Maxint)
•
p2[v]=v1;
•
else
•
p2[v]=0;
•}
• D2[v1]=0;s[v1]=TRUE;
• for(i=2;i<n;i++){
•
min=Maxint;
•
for(w=1;w<=n;w++)
•
if(!S[w]&&D2[w]<min)
•
{v=w;min=D2[w];}
3
基本要求
• (1)建立交通网络图的存储结构; • (2)解决单元最短路径问题; • (3)求两座城市顶点之间的最短路径问
题。
2020/12/11
4
算法思想
• 迪杰斯特拉算法的思想是:顶点v1为源点,集合S的初态只包含 顶点v1,数组dist记录从源点到其他各顶点当前的最短距离,其 初值为dist[i]=cost[v1][i],i=1,2…,n.从S之外的顶点集合V-S 中选出一个W,使dist[W]最小,如此重复直到S中包含V的所有 顶点。
2020/12/11
5
数据结构部分算法
• (1)建立有向图的存储结构:
• void CreateMGraph(MGraph *G,int n,int e)
•{
•
int i,j,k,w;
•
for(i=1;i<=n;i++)
•
G->vexs[i]=(char)i;
•
for(i=1;i<=n;i++)
•
• 费洛伊德算法的思想:首先考虑路径<Vi,V1>和<V1,Vj>是否存 在。如果存在,则比较路径<Vi,Vj>和<Vi,V1,Vj>的路径长度, 取长度较短者为当前所求的最短路径。然后考虑从Vi到Vj是否含 有顶点V2为中间顶点的路径<Vi,…,V2…,Vj>,若没有,则其 最短路径为之前所求,若有,则<Vi,…,V2…,Vj>可以分解为 <Vi,…V2>和<V2,…,Vj>,而其为前一次找到的中间顶点序号不 大于一的最短路径,将两者相加记为路径长度,比较该长度与前 一次的中间顶点序号不大于一的,取其最短的作为当前求的从Vi 到Vj的中间顶点长度不大于二的最短路径,直到选出不大于N的 最短路径为止。
for(j=1;j<=n:j++)G->arcs[i][j]=Maxint;
•
printf("输入%d条边的i、j及w:\n",e);
•
for(k=1;k<=e;k++){
•
scanf("%d,%d,%d",&i,&j&w);
•
G->arcs[i][j]=w;
•
}printf("有向图的存储结构建立完毕!\n");
•
}
•
}
•
}
•}
2020/12/11
8
PPT教学课件
谢谢观看
Thank You For Watching
9
《数据结构》课程设计报告
ห้องสมุดไป่ตู้
2020/12/11
1
交通咨询系统中的 最短路 径
• 一、问题描述 • 二、基本要求 • 三、算法思想 • 四、数据结构
2020/12/11
2
问题描述
• 建立交通图的存储结构、解决单源最短 路径问题、再实现两个地点最短路径问 题,也就是实现迪杰斯特拉和弗洛伊德 方法。
2020/12/11
•
S[v]=TRUE;
•
for(w=1;w<=n;w++)
•
if(!S[w]&&(D2[v]+G->arcs[v][w]<D2[w])){
•
D2[w]=D2[v]+G->arcs[v][w];
•
p2[w]=v;
•
}
•}
• printf("路径长度 路径\n");
2020/12/11
7
费洛伊德算法
• (3)费洛伊德算法:
• void Dijkstra(MGraph *G,int v1,int n)
•{
•
int D2[MVNum],p2[MVNum];
•
int v,i,w,min;
•
enum boolean S[MVNum];
•
for(v=1;v<=n;v++)
•
S[v]=FALSE;
•
D2[v]=G->arcs[v1][v];
• void Floyd(MGraph *G,int n)
•{
•
int i,j,k,v,w;
•
for(i=1;i<=n;i++)
•
for(j=1;j<=n;j++)
•
{
•
if(G->arcs[i][j]!=Maxint)
•
p[i][j]=j;
•
else
•
p[i][j];
•
D[i][j]=G->arcs[i][j];