实验报告
课程名称 《算法分析与设计》 实验日期 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