数据结构课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计说明书
课程名称:
专业:班级:
设计人:
目录
1需求分析说明 (2)
1.1 问题重述 (2)
1.2测试数据 (3)
1.2.1正常数据 (3)
1.2.2边缘数据(易错数据) (4)
2概要设计说明 (6)
2.1 程序的逻辑结构与存储结构 (6)
2.2数据的具体存储方式概述 (6)
2.3用到的函数概述 (6)
3详细设计说明 (8)
3.1程序的流程图 (8)
3.2程序的具体实现 (11)
4调试分析 (13)
4.1正常数据的测试 (13)
4.2边缘数据的测试 (17)
5课程设计总结 (22)
1需求分析说明
1.1 问题重述
要求采用一定的数据结构表示出学校的校园景点平面图,并且能够回答有关景点信息的查询、浏览路径的选择等问题。
具体要求如下:
程序输入的第一行应为数据的组数。
每组数据的第一行为3个整数placeNum、pathNum、operatorNum,分别对应校园景点的数量、景点间道路的数量、查询请求数量。
随后的一行为景点编号从1开始的placeNum个100以内的整数,依次代表每个景点的好玩度。
之后又有pathNum行,每行有3个整数,依次代表起始景点、终止景点、景点路径长度。
最后又operatorNum行,每行有一个整数代表操作数。
如果操作数为0,则继续输入一个景点place和要增加的好玩度addfavor,代表将place景点和与该景点直接连通的好玩度提高addfavor。
如果操作数为1,则继续输入一个景点place,代表查询景点place 的好玩度。
如果操作数为2,则继续输入一个起始景点startPlace、终止景点endPlace、道路长度weight,代表在startPlace、endPlace之间建立一条长度为weight的直接通路。
如果操作数为3,则继续输入一个起始景点startPlace、终止景点endPlace,代表查询startPlace、endPlace之间的最短道路距离。如果两景点间不连通则输出”No such path.”。
以上每次查询操作都输出一行。
1.2测试数据
1.2.1正常数据
第一组:
1
5 3 5
75 34 22 83 77
1 3 40
4 5 9
5 2 52
1 5
0 4 2
3 1 4
2 3 5 77
3 1 4
第二组:
1
4 4 6
66 42 87 69
1 2 11
1 3 23
4 2 9
3 4 19
1 3
0 1 10
1 3
3 1 4
3 2 3
1 4
1.2.2边缘数据(易错数据)
第一组:
1
4 3 4
10 20 30 40
1 2 10
1 3 20
1 2 20
3 1 2
2 1
3 30
3 1 3
3 1 4
第二组:
1
3 1 5
10 20 30
1 2 10
1 1
2 2
3 20
3 1 3
0 1 10
1 3
2概要设计说明
2.1 程序的逻辑结构与存储结构
题目要求表示出学校的校园景点平面图,因此在逻辑结构上我们可以用图来表示。又因为景点与景点之间的道路有长度信息,所以我们用图中的无向网作为数据结构。
无向网中的顶点表示各景点,其中存有景点的编号等信息,网中的边表示景点之间的道路,其中可以存放道路的信息。在存储结构上我们可以采用图的邻接矩阵和邻接表。由于之后题目要求可以查询某景点到另一景点的最短路径。因此我们采用图的邻接矩阵作为存储结构。
2.2数据的具体存储方式概述
定义结构体AMGraph用于储存景点数目、各景点的关系及道路长度,内部有邻接矩阵、int类型的变量VexNum代表顶点数目。
int类型数组favorNum用于存储每个景点的游客好玩度。
int 类型二维数组favorMatrix用于标记存储景点录入完成后的直接连通的景点。
2.3用到的函数概述
void InitMatrix(AMGraph &G){...}:图的初始化函数,将图的邻接矩阵初始化,主对角线元素全部为0,其他元素全部为MaxInt。
void ShortPath_Floyd(AMGraph &G,int startPlace, int endPlace){...}:部分弗洛伊德函数,形参有需要查询最短路径的图和起始景点,终止景点。作用为单独对某些增加的道路所连的两景点实现部分弗洛伊德算法,将弗洛伊德算法的时间复杂度由O(n3)变为O(n2)。
该函数的思想如下:因为所有景点间只有两个景点的道路长度发生了变化,而起始景点startPlace到其他景点的道路长度没有变化且终止景点endPlace到其他景点的道路长度没有变化。所以只有其他景点通过startPlace或者endPlace到达别的景点的最短路径发生了变化。因此我们就可以把原弗洛伊德算法里的三个循环变量去掉一个中间变量,将其替换为startPlace和endPlace。函数也就变成了最外层循环控制起点,内层循环控制终点的嵌套二层for循环。