数据结构课程设计报告-最短路径算法-二叉树的三种遍历.docx
- 文档编号:251346
- 上传时间:2022-10-07
- 格式:DOCX
- 页数:33
- 大小:340.78KB
数据结构课程设计报告-最短路径算法-二叉树的三种遍历.docx
《数据结构课程设计报告-最短路径算法-二叉树的三种遍历.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告-最短路径算法-二叉树的三种遍历.docx(33页珍藏版)》请在冰豆网上搜索。
数据结构课程设计报告
班级:
计算机科学与技术132班
姓名:
赖恒财
指导教师:
董跃华
成绩:
32信息工程学院
2015年7月8日
目录
图的最短路径算法实现
1. 需求分析 1
1.1程序设计内容 1
1.2设计要求 1
2.概要设计 2
3.详细设计 2
3.1数据类型的定义 2
3.2功能模块的设计 2
3.3主程序流程 9
4.调试分析 10
4.1问题回顾和分析 10
4.2.经验和体会 11
5.测试结果 12
二叉树的遍历
1.设计目的 13
2.需求分析 14
2.1课程设计的内容和要求 14
2.2选题的意义及背景 14
3.概要设计 14
3.1设计思想 14
3.2程序数据类型 16
3.3程序模块分析 16
3.3.1置空栈 16
3.3.2入栈 17
3.3.3出栈 17
3.3.4取栈顶操作 17
3.3.5判空栈 17
3.4函数关系:
18
4.详细设计 18
4.1二叉树算法程序截图和结果 18
5.程序测试结果及问题分析 19
6.总结 20
参考文献 21
附录1 22
附录2 26
30
图的最短路径算法实现
----基于floyd最短路径算法
1.需求分析
设计校园平面图,所含景点不少于8个。
以图中顶点表示学校内各景点,存放景点的名称、景点介绍信息等;以边表示路径,存放路径长度信息。
要求将这些信息保存在文件graph.txt中,系统执行时所处理的数据要对此文件分别进行读写操作。
1.1程序设计内容
1.从文件graph.txt中读取相应数据,创建一个图,使用邻接矩阵表示图;
2.景点信息查询:
为来访客人提供校园任意景点相关信息的介绍;
3.问路查询:
为来访客人提供校园任意两个景点之间的一条最短路径。
1.2设计要求
(1)程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应。
(2)程序要添加适当的注释,程序的书写要采用缩进格式。
(3)根据实验报告模板详细书写实验报告,在实验报告中给出校园平面图。
(4)校园平面图中的校园景点信息保存在文件graph.txt中。
2.概要设计
此程序主要实现以下几个模块,基于下面几个模块完全可以实现此题要求.
(1).图的创建
(2).输出提供可选查询景点
(3).景点介绍查询处理
(4).查找两景点间的最短路径
(5).Floyd算法(核心)
3.详细设计
3.1数据类型的定义
typedefstruct{
charname[100]; //名字
charinfo[10000]; //介绍
}VertexType; //顶点结构
typedefstruct{
VertexTypevexs[10];
intarcs[100][100]; //邻接矩阵
intvexnum,arcnum; //顶点个数,边的个数
}MGraph; //图结构
校园道路是双向通行的,可设校园平面图是一个带权的无向图,用邻接矩阵表示此无向网。
邻接矩阵的数据类型定义如下:
3.2功能模块的设计
3.2.1图的创建
voidinitGraph(){
freopen("graph.txt","r",stdin); //打开文件
scanf("%d%d",&mg.vexnum,&mg.arcnum); //读取顶点数、边数
//循环输入景点、景点介绍
for(inti=0;i scanf("%s%s",&mg.vexs[i].name,&mg.vexs[i].info); } //初始化矩阵,任意两点之间没有路 for(inti=0;i<100;i++){ for(intj=0;j<100;j++){ mg.arcs[i][j]=999999; //999999相当于无穷大 } } //输入距离 for(inti=0;i charfrom[100]; //开始结点名 charto[100]; //结束结点名 //f表示开始结点编号,t表示目的结点编号,dis表示两点间的距离 intf,t,dis; scanf("%s%s%d",&from,&to,&dis); //把景点名字换成编号 for(intj=0;j if(strcmp(mg.vexs[j].name,from)==0)f=j; if(strcmp(mg.vexs[j].name,to)==0)t=j; } //创建邻接矩阵 mg.arcs[f][t]=dis; mg.arcs[t][f]=dis; } floyd(); //floyd算法计算各两点之间的最短路径,后文定义 freopen("CON","r",stdin); //改变输入流 } 校园平面图可以表示成为一个无向网,用一个MGraph类型的变量mg表示这张无向网。 网中包含了景点的名字和信息,以及表示各景点之间是否有路可达邻接矩阵,同时还保存了景点个数和边数。 其俱体定义如下: Graph.txt 815 校门 江西理工大学校门 主教 学校教学主楼,有11层 二教 学校二号教学楼 图书馆供学生自习或借书 体育场 一个大的田径场,包括足球场, 女生宿舍生女生住宿的地方 南门 ? 学校通向外面的一个小门 蕙莘园食堂学校有三个食堂,其中一个就是蕙莘园食堂,靠近男生宿舍。 校门图书馆110 校门主教30 校门体育场70 校门南门90 校门女生宿舍110 主教图书馆50 主教二教10 二教蕙莘园食堂50 二教体育场30 图书馆体育场70 图书馆蕙莘园食堂60 体育场蕙莘园食堂40 体育场南门40 南门女生宿舍20 蕙莘园食堂女生宿舍130 程序中用到的关于学校各景点及信息的的数据保存在graph.txt文件中,文件的具体信息如下: graph.txt文件中的格式是,第一行包括两个整数,第一个整数是景点的个数n,也就是图中的结点个数,第二个整数是边的数量m。 接着n行数据分别是学校的每个景点(结点),每个景点后的是对景点的介绍。 再接着的m行是路径信息,每条路径信息有三部分数据组成,分别是起始结点,终止结点,和它们之间的路径长度。 3.2.2提供可选景点 提供可选景点信息这一模块,是向用户展示从graph.txt文件中读取到的学校的各大景 点,告诉用户提供的可查看的景点有哪些。 景点信息用一个for循环输出。 此外为了方便对景点的各项操作,我们在输出所有可选景点的同时还为它们进行了数字编号,在后面的查询或找路过程中还需要输入烦琐的景点名称,只需要输入想要查询的景点的对应编号即可进行操作。 简单方便,实用,用户体验性好。 //输出可选景点,并进行编号 voidoutPlace(){ printf("本校景点有: \n"); for(inti=0;i printf("\t\t\t%d、%s\n",i,mg.vexs[i].name); } printf("\n"); } 输出提供的可选景点的代码如下: 3.2.3景点信息查询处理 景点信息查询处理这一模块,要求用户输入要查询的景点的编号,根据用户输入的查询景点信息指令,判断要查询的景点,并同时作出反应,向用户展示景点的具体信息。 作为算法的健壮性,这一模块在用户输入查询指令后,判断用户输入的指令的合法性,防止出现异常。 //景点信息查询处理 voidoutInfo(){ intn; printf("----------------------------------------------\n"); printf("|您选择了1.查询景点信息|\n"); printf("----------------------------------------------\n"); printf(">>>>>>请选择您要查询的景点(0-%d): \n",mg.vexnum); scanf("%d",&n); if(n>=0&&n printf("\t%s: \n\t\t%s\n\n",mg.vexs[n].name,mg.vexs[n].info); } else{ printf("您输入的数据有误! \n"); } } 具体实现代码如下: 3.2.4查找两景点的最短路径 查找两景点的最短路径模块,同景点信息查询处理模块相似。 只不过是所处理的事情不一样。 查找两景点的最短路径模块要求用户输入要查询的两景点的编号a,b(a表示开始结点,b表示终止结点)。 然后程序会对用户输入的查询指令进行判断合法性,如果用户输入的指令合法,则告诉用户所查询到的最短路径。 如果输入指令不合法,则提醒用户输入的数据有误。 //两景点最短路径的查询 voidmindistance(){ inta,b; printf("----------------------------------------------\n"); printf("|您选择了2.查找最短路径|\n"); printf("----------------------------------------------\n"); printf(">>>>>>请输入要查询的两景点ab(ab表示景点编号): \n"); scanf("%d%d",&a,&b); if(a>=0&&a printf("\n----------------------------------------------\n"); printf("|起始地|目的地|最短路径|\n"); printf("----------------------------------------------\n"); printf("|%s|%s|%4d|\n",mg.vexs[a].name,m
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告 路径 算法 二叉 遍历
![提示](https://static.bdocx.com/images/bang_tan.gif)