校园导游系统 数据结构课程设计 简单且功能齐全

您所在的位置:网站首页 校园导游系统数据结构java 校园导游系统 数据结构课程设计 简单且功能齐全

校园导游系统 数据结构课程设计 简单且功能齐全

2024-07-13 11:50| 来源: 网络整理| 查看: 265

【问题描述】   用无向网表示南农校园景点平面图,所含景点不少于10个。图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等相关信息。 【基本要求】   (1) 查询各景点的相关信息;   (2) 查询图中任意两个景点间的最短路径。   (3) 查询图中任意两个景点间的所有路径。   (4) 增加、删除、更新有关景点和道路的信息。 【算法设计思想】 (1)图的存储结构:运用邻接矩阵来存储无向图的有关信息,各顶点的数据类型为了方便使用采用数字整形类型来标记。共有十个顶点分别记为1-10,共有11条路径,路径长度提前给出并存在邻接矩阵当中。 (2)菜单函数:为了保证能实现要求的6个功能,需要设计一个菜单函数来选择所需要的功能,同时设计一个退出功能。为了保证健壮性,还需要菜单函数自身实现递归直到使用了退出功能。 (3)查询函数算法:在菜单功能选择了功能1菜单功能后,进入到查询功能。通过switch,case来实现输入不同节点名称输出不同的介绍内容。 (4)最短路径算法:运用Floyd算法分别构建最小距离矩阵和选择路径矩阵。Floyd算法思想即为循环更新这两个矩阵。对于每一对节点u,v,循环查找是否存在一个顶点w使得u->w->v的距离比原来u->v的距离要小,如果是则更新该路径。分别设两个二位矩阵,命名为d[][],以及path[][],先初始化d[][]使该矩阵和邻接矩阵一样,再初始化path[][]。之后开始更新这两个矩阵,三次循环来查找是否存在路径更小的点,如果有更新这两个矩阵。最后输出结果,注意保存再矩阵中的点从0-9,但是为了方便用户所以显示出来的是1-10,因此在输出时要主要转换。 (5)所有路径算法:自身深度遍历递归。提前定义好全局start,end变量,以及两个数组stack[](用来存储路径上的顶点),v[](初始全为0,为了标志是否被访问过),为了简洁不使用栈,但为了实现栈的功能使用stack[]数组和全局变量top的组合使用。先将起点标记为访问过,并将该顶点放到数组stack中,top++,然后在该顶点的临界矩阵中找它的下一个点,如果有且未被访问过则将下一个点递归。因为要输出所有的路径,在递归结束后要将起点置为未被访问,top–,来实现所有路径的访问。 (6)插入算法:最后用临界矩阵来表示结果。要将新顶点的序号以及和其他顶点的路径信息存到邻接矩阵中,所以要新建一行。首先分析新顶点可能和其他不止一条路有路径,所以要循环询问用户是否该点与其他点有路径,用switch,case来判断何时结束,如果为1则继续修改临界矩阵的信息,如果为0则输出该邻接矩阵展示结果并结束循环。 (7)删除算法:首先要删除所有与这个被删除的节点相连的所有节点,即将这些原来存放权值的邻接矩阵信息换成32767,再将G.vexs[]数组向前移。最后将被删除节点后面以及右边的元素分别向前,向左移动。最后输出邻接矩阵。 (8)更新算法:更新两点之间权值的大小。只需要修改邻接矩阵中相应的数值即可,并用邻接矩阵来展示结果。 【源代码】

头文件: #include "stdio.h" #include "stdlib.h" #include "string.h" #define MAXNum 20 #define MAXint 32767 #define MAXVex 10 #define MAXArc 11 #define STACK_INIT_SIZE 20 typedef int ArcType; //权值类型 typedef int VertexType; typedef int SElemType; int stack[120],v[100]={ 0},top=0,start,end; //dfs int d[100][100],path[100][100]; //shortestway typedef struct { char vexs[MAXNum]; ArcType arcs[MAXNum][MAXNum]; int vexnum,arcnum; }MGraph; 函数块: #include "h.h" void display() //平面图函数 { printf("**********欢迎使用南京农业大学校园导游系统**********\n"); printf(" 1北门\n"); printf(" |\n"); printf(" |(7)\n"); printf(" |\n"); printf(" 2西门--(5)--3教学楼--(6)--4主楼\n"); printf(" | |\n"); printf(" |(8) |(5)\n"); printf(" | |\n"); printf(" 5图书馆--(5)-----6操场--(4)---7足球场--(2)---8篮球场\n"); printf(" | |\n"); printf(" |(2) |(3)\n"); printf(" | |\n"); printf(" 10南大门----------(5)--------------9宿舍\n"); } void CreateUDN(MGraph &G1) //创建无向网 { int i,j; G1.arcnum=MAXArc; G1.vexnum=MAXVex; for(i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3