Floyd算法、Dijkstra算法例题
二
1.用Floyd算法求解下图各个顶点的最短距离。
2.对于下图使用Dijkstra算法求由顶点a到顶点h的最短路径。
2.解析
1)用Floyd算法求解各个顶点的最短距离。
第一步:画出初始化距离矩阵
1 2 3 4
1 0 2 6 4
2 ∞ 0 3 ∞
3 7 ∞ 0 1
4 5 ∞ 12 0
第二步:逐步加入顶点,若加入顶点后路径变短,则修改。
①加入顶点1
<1,2> <1,3> <1,4> <2,1> < 3,1> <4,1>不变
<2,3> < <2,1>+<1,3> 不变
<2,4> < <2,1>+<1,4> 不变
< 3,2> > < 3,1>+<1,2> 最短路径改为9
< 3,4> < < 3,1>+<1,4> 不变
<4,2> < <4,1>+<1,2> 最短路径改为7
<4,3> < <4,1>+<1,3> 最短路径改为11
以此类推,加入顶点2,3,4
第三步:得到最终的距离矩阵
1 2 3 4
1 0 2 5 4
2 9 0 3 4
3 6 8 0 1
4 5 7 10 0
2)使用Dijkstra算法求由顶点a到顶点h的最短路径。
A集合表示已取出的顶点,B集合表示未取出的顶点,C[]数组存放顶点a到各顶点的最短路径。
1)原始c[]数组为
a b c d e f g h
dis ∞ 1 ∞ ∞ ∞ ∞ ∞ ∞
2)在数组中取出路径最短的顶点且该顶点未被访问过。
A:a,b
B:c,d,e,f,g,h
3)更新C数组,加入点b
a b c d e f g h
dis ∞ 1 ∞ 3 ∞ ∞ ∞ ∞
4)重复第二、三步使C数组填满
a b c d e f g h
dis ∞ 1 4 3 13 11 15 18
则到h的最短路径为18
3.设计
Floyd算法
void Floyd(int n,int graph[][MAXG]) {
int A[MAXG][MAXG];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; ++j) {
初始化A矩阵
}
}
for (int v = 0; v < n; v++)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n;++j) {
if (加入顶点v后的路径小于直达路径) {
A[i][j] = A[i][v] + A[v][j];//修改距离矩阵内的值
}
}
}
}
输出最短距离矩阵
}
Dijkstra算法
void Dijkstra(int a, int b, int n, int graph[][MAXG]) {//n为图中顶点个数
int dis[MAXG], visit[MAXG], min_g, min_weight;
for (int i = 0; i < n; i++)
{
初始化dis数组和visit数组
}
顶点a被访问
for (int j = 0; j < n-2; j++) {
设定min_weight和min_g初始值
for (int i = 0; i < n; i++){//找出dis数组中路径最短且未被访问的顶点
if (dis[i]小于min_weight并且顶点i未被访问过) {
将i赋值给min_g,将dis[i]赋值给min_weight
}
}
顶点min_g被访问
for (int i = 0; i < n; i++){
if (顶点min_g到顶点i的路径与min_weight的路径之和小于dis[i]) {
将graph[min_g][i]与min_weight的和赋值给dis[i]
}
}
}
输出dis[b],即点a到点b的最短路径
}
4.分析
Floyd算法的时间复杂度为O(n3)
Dijkstra算法的时间复杂度为O(n2)
Floyd算法、Dijkstra算法例题相关推荐
- Floyd算法Dijkstra算法
Floyd算法和Dijkstra算法 一.Floyd算法 1.简要介绍:Floyd算法又称插点法,是利用动态规划的思想寻找有权图多源点之间最短路径的算法,算法目的是寻找从点i到点j的最短路径. 2.步 ...
- 计算机网络最短路径路由选择,最短路径算法Dijkstra算法在路由选择中的应用.pdf...
最短路径算法Dijkstra算法在路由选择中的应用.pdf 计算机与网络 江苏联合职业技术学院徐州机电工程分院 王恒青 江苏联合职业技术学院徐州生物工程分院 宋如敏 [摘要]本文介绍了路由算法的设计目 ...
- 最短路算法 :Bellman-ford算法 Dijkstra算法 floyd算法 SPFA算法 详解
本文链接 :http://www.cnblogs.com/Yan-C/p/3916281.html . 在本文中因为邻接表在比赛中不如前向星好写,而且前向星效率并不低所以,本文的代码 存图只 ...
- 牛客网 最短路 Floyd算法 Dijkstra算法 Java大数
链接:https://www.nowcoder.com/questionTerminal/a29d0b5eb46b4b90bfa22aa98cf5ff17 来源:牛客网 最短路径 热度指数:2992 ...
- 图论经典算法——Dijkstra算法
1. 解决问题 目的是求某一顶点到其余各个顶点[最短路径]. 2. Dijkstra算法思想 假设一共有两个顶点集合 S 和 T ,集合 S 中存放图中已找到最短路径的顶点,集合 T 中存放图中的剩余 ...
- dijkstra算法_最短路径算法—Dijkstra算法详解
介绍 对于dijkstra算法,很多人可能感觉熟悉而又陌生,可能大部分人比较了解bfs和dfs,而对dijkstra和floyd算法可能知道大概是图论中的某个算法,但是可能不清楚其中的作用和原理,又或 ...
- dijkstra邻接表_掌握算法-图论-最短路径算法-Dijkstra算法
如果图是赋权图,那么问题就变得更困难了不过我们仍然可以使用来自无权情形时的想法. 我们保留所有与前面相同的信息.因此,每个顶点或者标记为Known的,或者标记为Unknown的.像之前一样,对每一个顶 ...
- HDU 1874 SPFA算法Dijkstra算法
SPFA 快速最短路算法 队列优化 #include<bits/stdc++.h> using namespace std; const int maxn=205; vector<p ...
- 【JAVA算法】图论算法 -- Dijkstra算法
写在前面: 我也是一名java语言的爱好者,仅以此文作为学习的记录,对于文中出现的代码规范,代码格式,算法效率等问题,希望各路大神不吝赐教,在下感激不尽.同是学习的同学也同样希望互相交流,取长 ...
- 图论算法-dijkstra算法
dijkstra算法 思想: 用于解决单源最短路问题,即给定有向图G和起点from,通过算法得到from到其他每个顶点的最短距离. 步骤: 设置集合selectedNode存放已被访问过的点,每次从未 ...
最新文章
- ZIL (ZFS intent log) zil.c
- C#获取键盘和鼠标操作的时间的类
- python三十三:sys模块
- mysql 存储微信昵称乱码_MYSQL 保存微信昵称特殊字符报错解决方法-设置编码集为utf8mb4的方法...
- python爬虫03
- oracle显示数据中心类异常,Oracle_10g数据库基础教程-参考答案
- 有关linux信号汇总
- c语言上机实验第五章答案,安徽大学C语言上机实验参考答案
- ASP.NET MVC5 + EF6 + BootStrap 实战系列教程
- vim插件ctags的安装和使用
- 谈谈对于企业级系统架构的理解
- HTML5之横向二三级,纵向三级导航栏
- Kaggle竞赛:San Francisco Crime Classification(旧金山犯罪分类) 参赛心得
- nrf52840烧录提示错误原因和解决办法
- 明日之后服务器维修公告维修,《明日之后》排队问题维护进度公告
- CAD如何使用圆命令做辅助线绘制梯形图案呢?
- python抢购茅台抢购描述
- 手指静脉图像分类识别
- 天下足球--背景音乐
- IEEE免费论文下载