算法分析与设计实验2

实验报告

课程名称 《算法分析与设计》 实验日期 2021年3月8日 至 2021年 3 月 15 日
学生姓名 戴子博 所在班级 计算机194 学号 2019212212130
实验名称 用Floyed算法和Dijkstra算法求顶点间最短路径
实验地点 勤13-208 同组人员

1.问题

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

在这里插入图片描述

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

2.解析
floyed算法:用来找出每队点之间的最短距离,它需要用邻接矩阵来储存边,这个算法通过最佳子路径来得到最佳路径
Dijkstra算法:用于计算一个节点到其他节点的最短路径。
它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止

3.设计
Floyed算法:

void Folyed(){
	for(int flag=0;flag<n;flag++){//flag为可经过的中转点 
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				map[i][j]=min(map[i][j],map[i][flag]+map[flag][j]);
			}
		}
	}
} 

Dijkstra算法:

int Dijkstra(int start,int end){
	int min,book[n]={0},index,dist[n];
	for(int i=0;i<n;i++){
		dist[i]=map[start][i];
	} 
	book[start]=1;
	for(int i=0;i<n-1;i++){
		min=INF;
		for(int j=0;j<n;j++){
			if(book[j]==0&&dist[j]<min){
				min=dist[j];
				index=j;
			}
		}
		book[index]=1;
		for(int k=0;k<n;k++){
			if(map[index][k]<INF){
				if(dist[k]>dist[index]+map[index][k]);
				dist[k]=dist[index]+map[index][k];
			}
		}

	}
	return dist[end];
}

4.分析
Floyed:O(n^3)
Dijkstra:O(n^3)
5.源码
博客地址:https://blog.csdn.net/shaojinfu?spm=1000.2115.3001.5343
github源码地址:https://github.com/CNFierceman/Algorithm_homework.git

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值