数据结构课程设计Floyd算法求解最短路径Word文件下载.docx
- 文档编号:13504847
- 上传时间:2022-10-11
- 格式:DOCX
- 页数:18
- 大小:189.32KB
数据结构课程设计Floyd算法求解最短路径Word文件下载.docx
《数据结构课程设计Floyd算法求解最短路径Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计Floyd算法求解最短路径Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。
格式要求:
[1]作者,等.书名.出版地:
出版社,出版年
5.附录:
程序清单(应带有必要的注释)
沈阳航空航天大学
课程设计报告
课程设计名称:
数据结构课程设计
课程设计题目:
利用弗洛伊德(Floyd)算法求解最短路径
院(系):
计算机学院
专业:
计算机科学与技术(物联网方向)
班级:
34010105
学号:
姓名:
指导教师:
说明:
结论(优秀、良好、中等、及格、不及格)作为相关教环节考核必要依据;
格式不符合要求;
数据不实,不予通过。
报告和电子数据必须作为实验现象重复的关键依据。
学术诚信声明
本人声明:
所呈交的报告(含电子版及数据文件)是我个人在导师指导下独立进行设计工作及取得的研究结果。
尽我所知,除了文中特别加以标注或致谢中所罗列的内容以外,报告中不包含其他人己经发表或撰写过的研究结果,也不包含其它教育机构使用过的材料。
与我一同工作的同学对本研究所做的任何贡献均己在报告中做了明确的说明并表示了谢意。
报告资料及实验数据若有不实之处,本人愿意接受本教学环节“不及格”和“重修或重做”的评分结论并承担相关一切后果。
本人签名:
日期:
2015年1月5日
课程设计任务书
课程设计名称
数据结构课程设计
专业
学生姓名
孙思
班级
学号
2013040101204
题目名称
起止日期
2015
年
1
月
5
日起至
16
日止
课设内容和要求:
给出一张无向图,图上每一个顶点表示一个城市,顶点之间的边表示城市之间存在路径,边上的权值表示城市间的路经长度。
利用弗洛伊德(Floyd)算法求解最短路径求解任意两个城市之间的最短路径问题。
参考资料:
《算法与数据结构》
《C语言程序设计》
教研室审核意见:
教研室主任签字:
指导教师(签名)
日
学生(签名)
第一章需求设计
第一章需求设计
1.1题目介绍
将问题分解为三个方面,第一个方面是对于无向图的存储问题,第二个方面是实现弗洛伊德(Floyd)算法求解最短路径,第三个方面是将最短路径输出。
首先对于图的建立选择合适的存储结构,考虑到之后要用的弗洛伊德算法所以选择采用邻接矩阵存储无向图。
然后采用弗洛伊德算法,该算法又叫插点法。
是利用三重循环产生一个存储每个结点最短距离的矩阵,基本思想是设置一个n阶矩阵D(k),D(k)[i][j]表示从i到j的路径长度,k表示运算步骤。
用两个顶点之间边的权值作为路径长度,无边连接记做无穷,多次循环,向原路径加入新的顶点,若增加的顶点使得路径比原路径短,则用新路径代替原始路径,将顶点信息存储在另一个三维数组p中,p[v][w][u]存储的是由i到j路径经过的所有顶点。
三重循环执行完毕最短路径的信息存储在两个数组中。
最后将最短路径的信息输出。
1.2功能要求
一个无向图用每个顶点代表城市,顶点之间边的权重表示城市之间的路径,将顶点信息和边的信息输入程序,即可得到每两个城市之间的最短路径长度值以及这条路径经过的城市。
可以为建址问题提供参考。
设计环境:
(1)WINDOWS7系统
(2)VisualC++开发环境
开发语言:
C语言
第二章程序设计
2.1详细设计
2.1.1功能模块图
调
用
弗
洛
伊
德
算
法
输
入
无
向
图
顶
点
及
权
值
图2.1功能模块图
2.1.2函数描述
Find:
根据名称得到指定顶点在顶点集合中的下标,利用此函数找到顶点所在位置,进而对无向图赋权值。
Create:
创建无向图的邻接矩阵,因为每条边都有权值,创建的是无向网的邻接矩阵,用权值代替1,没有边连接则为无穷。
FLOYD:
设置一个n阶矩阵D(k),D(k)[i][j]表示从i到j的路径长度,k表示运算步骤。
主函数:
在主函数里定义一个无向图,一个三维矩阵p,二维矩阵D,对各个函数进行调用,实现无向网的建立,运用弗洛伊德算法求解出最短路径,将路径长度以及经过的顶点信息输出。
2.2主要算法描述
图2.2.1FLOYD函数
图2.2.2Find函数
图2.2.3Main函数
图2.2.4Create函数
第三章使用说明
3.1用法说明
1.将顶点数和边数输出,中间用空格隔开。
图3.1.1
2.输入顶点信息。
图3.1.2
3.依次输入每条边连接的两个顶点用空格间隔,边的权值。
图3.1.3
4.得到每两个顶点城市间的最短距离以及经过的城市。
图3.1.4
.4
第四章程序测试
4.1运行结果
图4.1
4.2存在的缺陷
1.无向图的顶点信息只能用一个字符表示。
将存储顶点信息的字符型改为字符数组就可以完善该缺陷。
2.将两点的最短路径输出时只能显示经过的顶点有哪些,无法显示真实的路径顺序。
3.输入无向图信息只能用手动输入,无法用文件直接写入。
4.输入不符合要求的数据会使程序自动停止。
参考文献
[1]张长海.C语言程序设计[M].北京:
高等教育出版社,2006
[2]吴启武.C语言课程设计案例精编.北京:
清华大学出版社,2011.
[3]郭翠英.C语言课程设计案例精编.北京:
中国水利水电出版社,2004.
[4]姜灵芝,余键.C语言课程设计案例精编.北京:
清华大学出版社,2008.
[5]黄明,梁旭,万洪莉.C语言课程设计.北京:
电子工业出版社,2006
附录(关键部分程序清单)
#include"
stdio.h"
stdlib.h"
#defineMAX20
#defineINFINITY9999
typedefboolPathMatrix[MAX][MAX][MAX];
typedefintDistanceMatrix[MAX][MAX];
typedefstruct
{
intvexnum,arcnum;
charvexs[MAX];
intarcs[MAX][MAX];
}MGraph;
intFind(charvex,MGraphMG)//根据名称得到指定顶点在顶点集合中的下标vex表示顶点
{//return如果找到则返回下标,否则返回0
inti;
for(i=0;
i<
MG.vexnum;
i++){
if(MG.vexs[i]==vex){
returni;
}
return0;
}
voidCreate(MGraph&
G)
inti,j,k,v1,v2,w;
printf("
请输入顶点数和边数:
"
);
scanf("
%d%d"
&
G.vexnum,&
G.arcnum);
getchar();
for(i=0;
G.vexnum;
i++)
{
请输入第%d个结点:
i+1);
%c"
G.vexs[i]);
for(j=0;
j<
j++)
G.arcs[i][j]=INFINITY;
for(k=0;
k<
G.arcnum;
k++)
charc1,c2;
请输入与第%d条边相连的两条边v1v2:
k+1);
c1);
c2);
请输入该边的权重:
%d"
w);
v1=Find(c1,G);
v2=Find(c2,G);
G.arcs[v1][v2]=w;
G.arcs[v2][v1]=w;
voidFLOYD(MGraphG,PathMatrix&
P,DistanceMatrix&
D)
intv,w,u,i;
for(v=0;
v<
++v)
for(w=0;
w<
++w)
D[v][w]=G.arcs[v][w];
for(u=0;
u<
++u)
P[v][w][u]=false;
if(D[v][w]<
INFINITY)
P[v][w][v]=true;
P[v][w][w]=true;
for(u=0;
for(v=0;
for(w=0;
if(D[v][u]+D[u][w]<
D[v][w])
{
D[v][w]=D[v][u]+D[u][w];
for(i=0;
++i)
P[v][w][i]=P[v][u][i]||P[u][w][i];
}
intmain()
MGraphG;
inti,j,k;
Create(G);
PathMatrixp;
DistanceMatrixD;
FLOYD(G,p,D);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 Floyd 算法 求解 路径