数据结构课程设计论文
1.4.2 画出主菜单模块
当主菜单中的所有信息展现在访客面前时,一个好的模块可以给访客一种赏心悦目的感觉,进而能给访客留下深刻的印象,因此,在此程序中使用一个大表格将所有信息都囊括在内,这个模块需要调用子函数void Menu()然后,用printf输出“——”即可。
(详细代码请参看源代码)
1.4.3 存储学校各景点信息
建立一个邻接矩阵来存放无向图G,需要建立一个子函数MGraph InitGraph,在这个函数里,顶点个数决定了邻接矩阵的行数和列数,而且,每个顶点中必须包含三个数据:景点的编号vexnum、景点的名称name、景点的简单介绍introduction。其中,景点的编号可以放在一位数组中,用一维数组进行存储;景点的名称和简单介绍直接用字符串进行输入存储和输出; MGraph InitGraph(void) {
MGraph G; int i,j;
G.vexnum=10; //景点个数 G.arcnum=14; //路径条数 for(i=0;i G.vexs[i].num=i; //存放顶点的数组 strcpy(G.vexs[0].name,\三食堂\ strcpy(G.vexs[0].introduction,\二楼更美味\//对各个景点编号、名称和简介的存放 ???? for(i=0;i G.arcs[i][j].adj=INFINITY; //如果两个景点间存在路径 G.arcs[0][1].adj=100; //对两个景点间的距离进行存储 ???? 1.4.4 查询景点之间最短路的算法 为应对访客对两个景点之间最短距离的查问,在邻接矩阵的基础上进行弗洛伊德算法,有关代码如下: void Floyd(MGraph *G) - 5 - 数据结构课程设计论文 { int v,u,i,w,k,j,flag=1,p[10][10][10],D[10][10]; for(v=0;v D[v][w]=G->arcs[v][w].adj; for(u=0;u p[v][w][v]=1;p[v][w][w]=1; } } for(u=0;u 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]; } 在此过程中还需要访客对要查询的两个景点进行输入,为此,当遇到非景点编号时应有相应的处理程序: if(k<0||k>G->vexnum||j<0||j>G->vexnum) { printf(\景点编号不存在!请重新输入出发点和目的地的编号:\ scanf(\ 当访客输入正确的景点编号时,程序运行过程中在输出此景点编号的同时,还要输出此景点的名称、最短距离: if(k>=0&&k printf(\ for(u=0;u - 6 - 数据结构课程设计论文 printf(\ printf(\ printf(\总路线长%dm\\n\ 1.4.5 景点查询与应错算法 为向访客提供某一景点的介绍,还需要一个void Search(MGraph *G) 函数,在这个函数中同样需要访客输入想查询的景点的编号,如果访客输入的景点不存在,系统会对此作出应急反应,详细代码请参看源代码。 1.5 调试分析 做这个程序首先要对访客的要求进行足够的分析,开始时的程序运行时是这个样 子的: 开始还没有觉得出现问题,因为在编写过程中我已记住这个系统的命令符号是什么,可是,当别人看见我这个程序时,他们不觉要问:你让我如何进行option?通过上网查询,我编写了如兄一段程序: void cmd(void) { int i; b=InitGraph(); Menu(); scanf(\ while(i!=4) { switch(i) { case 1:system(\ case 2:system(\ - 7 - 数据结构课程设计论文 case 3:system(\ case 4:exit(1);break; default:break; } scanf(\ } } 再次运行时的界面: 这样,任何一个进入此系统的访客看见主菜单提示,无论他想进行什么查询,都会一目了然,因此存在的问题也就迎刃而解了。 1.5.1 测试数据:校园全景图 当访客要浏览校园全景时,输入1,按enter: 此处存在一个问题:如何让这个全景图展现给访客的样子是一个有着地理方位的平面图,这样更方便访客对校园的全面了解,目前这个问题没有解决。 - 8 - 数据结构课程设计论文 当访客输入错误的命令时,系统对错误不作出反应,例如:访客输入6: 这个地方需要改进,应该出现一个错误提示界面,但由于时间和自身技术的问题,未对此进行优化。 1.5.2 测试数据:查询最短路径 当访客要访问任意两个景点之间的最短路径时,以景点4和景点1为例,首先输入2(选择出发地点和目的地),再按要求输入景点4,按enter、再输入景点1,按enter: 这是我觉得最好的运行结果,弗洛伊德的时间复杂度我目前尚不了解,但他的功能非常完美。 这个程序段有个出错应急系统,当访客输入的景点编号不正确时,例如:输入目的地的编号为14,系统自动提示: 1.5.3 数据测试: 当访客要查询某一景点的信息时,以景点2为例,首先输入3(查看景点信息), - 9 -