算法分析与设计实践(作业二):Floyd算法与Dijkstra算法求最短距离

Floyd算法与Dijkstra算法求最短距离

1. 问题

(1)用Floyd算法求解下图各个顶点的最短距离。写出Floyd算法的伪代码和给出距离矩阵(顶点之间的最短距离矩阵),按实验报告模板编写算法。
在这里插入图片描述

(2) 对于下图使用Dijkstra算法求由顶点a到顶点h的最短路径,按实验报告模板编写算法。
在这里插入图片描述

2. 解析

(1)Floyd算法

在这里插入图片描述

(2)Dijkstra算法

在这里插入图片描述
在这里插入图片描述

3. 设计

(1) Floyd算法:
Floyd(){
	枚举顶点k ∈ [1,n]
		以顶点k为中介点,枚举所有顶点对i和j(i ∈ [1,n],j ∈1[1,n])
			如果dis[i][k] + dis[k][j] <dis[i][j]成立
				赋值dis[i][j] = dis[i][k] + dis[k][j]
}
(2) Dijkstra算法:
Dijkstra(G,d[],s){
	初始化
	for(循环n次){
	u = 使dis[u]最小的还未访问的顶点的标号;
	记u已被访问;
	for(从u出发能到达的所有顶点v){
		if(v未被访问&&以u为中介点使s到顶点v的最短距离dis [v]更优){
		 优化d[v]; 
			} 
		} 
	}
}

4. 分析

(1)Floyd算法:

时间复杂度为O(n^3)

(2)Dijkstra算法:

时间复杂度为O(e·logu)(e边数,u顶点数)

5. 源码

代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值