1、最短距离问题数据结构课程设计报告数据结构课程设计报告题目:北海公园主要游览景点之间最短距离问题一、课程设计题目:北海公园主要游览景点之间最短距离问题二、问题定义:(由教师指定)图的最短路径问题是指从指定的某一点v开始,求得从该地点到图中其它各地点的最短路径。并且给出求得的最短路径的长度及途径的地点。除了完成最短路径的求解外,还能对该图进行修改,如顶点以及边的增删、边上权值的修改等。三、需求分析1、设计北海公园的平面图。选取若干个有代表性的景点抽象成一个无向带权图,以图中顶点表示公园内各景点,边上的权值表示两景点之间的距离。 2、输入的形式:整型数字输入值的范围:0-10 3、输出的形式:由二元
2、组表示以邻接矩阵存储的图4、程序所能达到的功能;(1)输出顶点信息:将公园内各景点输出。(2)输出边的信息:将公园内每两个位置的距离输出。(3)修改:修改两个位置的距离,并重新输出每两个位置的距离;(4)求最短路径:输出给定两点之间的最短路径的长度及途经的地点,输出任意一点与其他各点的最短路径。(5)删除:删除任意一条边。(6)插入:插入任意一条边。5、算法涉及的基本理论分析:定义邻接矩阵adjmatrix;自定义顶点结构体VertexType;定义邻接表中的边结点类型edgenode;switch算法;狄克斯特拉法(Dijkstra)求任意两结点之间的最短路径;6、题目研究和实现的价值。四、
3、算法设计1、概要设计(1)存储结构设计本系统采用图结构类型存储抽象北海公园地图的信息。其中:各景点间的邻接关系用图的邻接矩阵类型(adjmatrix)存储;景点(顶点)信息用结构数组(VertexType)存储,其中每个数组元素是一个结构变量,包含景点编号、景点名称两个分量;图的顶点个数由分量MaxVertexNum表示,它是整型数据。(2)主界面设计为了实现公园导游系统各功能的管理,首先设计一个含有多个菜单项的主控菜单子程序以链接系统的各项子功能,方便用户使用本系统。(3)系统功能设计a学校景点介绍公园景点介绍由函数PrintMatrix根据邻接矩阵输出二元组表示实现。当用户选择该功能,系统
4、即能输出全部景点的信息:包括景点编号、景点名称。b查看浏览路线查看浏览路线采用狄克斯特拉(Dijkstra)算法实现。当用户选择该功能,系统能根据用户所在门起始编号,求出从该门到其它景点的最短路径线路。c更改图的信息更改图的信息功能由主调函数change函数完成,可以实现图的若干基本操作。例如:插入、删除边,重建图等。2、主程序的流程以及各程序模块之间的层次(调用)关系。(1)公园抽象图设计(2)模块设计本程序包含3个模块:主程序模块、工作区模块和无向网操作模块。3、详细设计(1)实现概要设计中定义的所有数据类型; /邻接矩阵的结构体const int MaxVertexNum=9;const
5、 int MaxEdgeNum=16300;typedef int WeightType; const WeightType MaxValue=28;/顶点结构体struct VertexType int num_d;/顶点代号 char name20;/顶点名称;typedef VertexType vexlistMaxVertexNum;typedef int adjmatrixMaxVertexNumMaxVertexNum;/定义邻接表中的边结点类型struct edgenode int adjvex; WeightType weight; edgenode *next;(2)所有函数
6、的接口描述;/将二维数组里的数据传输给邻接矩阵void InitMatrix( )/将景点名称数据传输给顶点结构体void InitVT( )/邻接矩阵的二元组表示void PrintMatrix( )/PATHvoid PATH( )/最短路径:狄克斯特拉void Dijkstra( )/输出最短路径void Print( )/插入路径问题 void change( )(3)所有函数的算法描述(只需要写出伪码算法);/将二维数组data 的数据传输给邻接矩阵GAvoid InitMatrix(adjmatrix &GA,int data99) GAij=dataij;/将景点名称数据a传输给
7、顶点结构体VTvoid InitVT(VertexType VT9,char *a9) strcpy(VTi.name,ai); /邻接矩阵的二元组表示void PrintMatrix(adjmatrix GA,VertexType VT9) coutV=; couti-VTi.name,; cout8-VT8.nameendl; coutE=;couti,jGAij,; coutendl;/输出最短路径void Print(edgenode *path9,int begin,VertexType VT9) cout从起点到达 VTi.name 的最短路径为-; coutadjvex.name
8、; coutVTi.namen; cout无法通行至 VTi.name ,请检查路径问题!endl;/插入路径问题void change(int x,int y,int z,adjmatrix &GA) GAxy=z; GAyx=z;(4)对主程序和其他模块也都需要写出伪码算法void main() char *a9= ;/动态字符串数组 int data99= ; adjmatrix GA;/定义邻接矩阵 VertexType VT;/定义顶点结构体 InitVT(VT,a);/传输顶点数据 InitMatrix(GA,data);/传输结构体数据 int dist; edgenode *p
9、ath; int chose1=0,chose2=0,chose3=0,jidong_1=0,start=0,insert1=-1,insert2=-1,insert3=-1;/循环,选择,机动元素 do cout*-欢迎使用北海公园路径查询程序-*n; cout*-*chose1; switch(chose1) case 1: PrintMatrix(GA,VT);/根据邻接矩阵输出二元组表示 break; case 2: do cout*欢迎进行最短路径选择界面!请输入您从哪个门进入!*n; cout-nchose2; switch(chose2) case 1: cout您选择的起点为东
10、门endl; start=2; Dijkstra(GA,dist,path,start,9); Print(path,start,VT); break; case 2: cout您选择的起点为前门endl; start=0; Dijkstra(GA,dist,path,start,9); Print(path,start,VT); break; case 3: cout您选择的起点为后门endl; start=5; Dijkstra(GA,dist,path,start,9); Print(path,start,VT); break; case 0: system(cls);/清屏语句 cou
11、t退出成功,返回主菜单!nendl; break; default: system(cls);/清屏语句 cout您的输入有误,返回最短路径界面重新输入!endl; break; while(chose2!=0); break; case 3: do coutchose3; switch(chose3) case 1: coutinsert1; coutinsert2; coutinsert3; change(insert1,insert2,insert3,GA); cout插入成功!nendl; break; case 2: coutinsert1; coutinsert2; coutins
12、ert3; change(insert1,insert2,insert3,GA); cout修改成功!nendl; break; case 3: coutinsert1; coutinsert2; change(insert1,insert2,100000,GA); cout删除成功!nendl; break; case 0: break; default: cout您的输入有误,即将返回路径修改界面endl; break; while(chose3!=0); system(cls);/清屏语句 break; case 4: system(cls);/清屏语句 cout退出成功欢迎您再次使用本
13、系统O(_)O谢谢endl; break; default: cout您的输入有误,即将返回主菜单!nnnendl; break; while(chose1!=4);(5)画出函数的调用关系图。系统子程序及功能设计 本系统共设置18个子程序,各子程序的函数名及功能说明如下。(1)InitVT(VT,a);/传输顶点数据(2)InitMatrix(GA,data);/传输结构体数据(3)PrintMatrix(GA,VT);/根据邻接矩阵输出二元组表示(4)Dijkstra(GA,dist,path,start,9); Print(path,start,VT); / 用Dijkstra算法,求一个景点到其他景点间的最短路径,并打印(5)change(insert1,insert2,insert3,GA);/修改图,包括增删边,修改权(6)switch函数主要调用关系图 图中数字是各函数的编号五、算法实现六、软件测试七、技术讨论(可选)八、收获与体会 本次实践让我们小组懂得如何运用图结构来编写与地图有关的查询程序,小组成员发挥团队合作精神,分工合作,各尽其职,在短时间内完成程序编写。九、软件运行的部分截图及说明主菜单界面查询景点及路径查询从东门进入各景点的最短路径返回主菜单修改路径页面插入路径退出程序
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1