景区旅游信息综合管理系统.doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《景区旅游信息综合管理系统.doc》由会员分享,可在线阅读,更多相关《景区旅游信息综合管理系统.doc(35页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、校园旅游信息管理系统1.1项目需求分析在旅游景区,常常会碰到游客探询从一个景点到另一个景点最短路径和最短距离,这类游客不喜爱根据导游图线路来游览,而是挑选自己感爱好景点游览。为于帮助这类游客信息查询,就需要计算出全部景点之间最短路径和最短距离。算法采取迪杰斯特拉算法或弗洛伊德算法均可。建立一个景区旅游信息管理系统,实现关键功效包含制订旅游景点导游线路策略和制订景区道路铺设策略。任务中景点分布是一个无向带权连通图,图中边权值是景点之间距离。1)景区旅游信息管理系统中制订旅游景点导游线路策略,首先经过遍历景点,给出一个入口景点,建立一个导游线路图,导游线路图用有向图表示。遍历采取深度优先策略,这也
2、比较符合游客心理。(2)为了使导游线路图能够优化,可经过拓朴排序判定图中有没有回路,若有回路,则打印输出回路中景点,供人工优化。(3)在导游线路图中,还为部分不愿按线路走游客提供信息服务,比如从一个景点到另一个景点最短路径和最短距离。在本线路图中将输出任意景点间最短路径和最短距离。(4)在景区建设中,道路建设是其中一个关键内容。道路建设首先要确保能连通全部景点,但又要花最小代价,能够经过求最小生成树来处理这个问题。本任务中假设修建道路代价只和它里程相关。所以归纳起来,本任务有以下功效模块:创建景区景点分布图;输出景区景点分布图(邻接矩阵)输出导游线路图;判定导游线路图有没有回路;求两个景点间最
3、短路径和最短距离;输出道路修建计划图。主程序用菜单选项供用户选择功效模块。1.2项目设计步骤 1.2.1项目总体框架校园旅游信息管理系统创建景区景点分布图输出景区景点分布图输出景区导游线路图导游线路图有无回路两个景点间最短路径输出道路修建规划图1.2.2项目数据结构#ifndef SUCCESS/标志位成功#define SUCCESS1#endif#ifndef FAILURE/标志位失败#define FAILURE0#endif#ifndef INF /标志位无穷#define INF 0x3f3fffff#endif#ifndef MAXNUM #define MAXNUM20#end
4、iftypedef bool STATUS;/定义函数状态数据类型typedef char VERTEXTYPEMAXNUM11;/定义顶点向量数据类型typedef int ADJMATRIXMAXNUMMAXNUM;/定义邻接矩阵数据类型typedef struct GRAPH/定义图数据类型VERTEXTYPE Vexs;/图顶点向量ADJMATRIX Arcs;/图邻接矩阵int VexNum;/图目前顶点int ArcNum;/图目前弧*PGRAPH;/定义图指针数据类型typedef struct CLOSEDGE/定义辅助数组数据类型VERTEXTYPE Vexs;/图顶点向量i
5、nt LowcostMAXNUM;/*PCLOSEDGE;/定义辅助数组指针数据类型1.2.3项目模块设计创建景区景点分布图一. 邻接矩阵 (Adjacency Matrix)(二维数组表示法)在图邻接矩阵表示中,有一个统计各个顶点信息顶点表,还有一个表示各个顶点之间关系邻接矩阵。设图 A = (V, E)是一个有 n 个顶点图, 图邻接矩阵是一个二维数组 A.edgenn,定义(满足以下条件n阶矩阵):无向图数组表示法特点:1)无向图邻接矩阵是对称矩阵,同一条边表示了两次;2)顶点v度:在无向图中等于二维数组对应行(或列)中1个数;在有向图中, 统计第 i 行 1 个数可得顶点 i 出度,统
6、计第 j 列 1 个数可得顶点 j 入度。3)判定两顶点v、u是否为邻接点:只需判二维数组对应分量是否为1;4)顶点不变,在图中增加、删除边:只需对二维数组对应分量赋值1或清0;5)设存放顶点一维数组大小为n(图顶点数n), G占用存放空间:n+n2;G占用存放空间只和它顶点数相关,和边数无关;适适用于边稠密图;步骤图:程序:/创建景区景点分布图STATUS CreateGraph(PGRAPH pGraph)printf(ttt_n);printf(nttt$t创建景区景点分布图t$n);printf(ttt_n);/初始化图顶点数printf(ttt初始化顶点数和弧度数.n);printf
7、(ttt请输入图顶点数(VexNum);/检验if(pGraph-VexNum20)printf(ttt警告:输入数据错误!n);printf(ttt按任意键回主菜单!);getch();return FAILURE;/初始化图弧数printf(ttt请输入图弧度数(ArcNum);/检验if(pGraph-ArcNum20)printf(ttt警告:输入数据错误!n);printf(ttt按任意键回主菜单!);getch();return FAILURE;/初始化图顶点名称printf(ttt-n);printf(ttt初始化顶点名称.n);for(int i=0;iVexNum;i+)pr
8、intf(ttt请输入第%d个顶点名称:,i+1);scanf(%s,pGraph-Vexsi);/初始化图弧权值为最大值for(i=0;iVexNum;i+)for(int j=0;jVexNum;j+)pGraph-Arcsij=INF;/输入弧信息printf(ttt-n);printf(ttt初始化弧信息.n);printf(ttt请输入弧信息(注:从0开始):n);for(i=0;iArcNum;i+)int Stav,Endv,Weight;printf(ttt请输入第%d条弧(格式:Vi Vj Weight):,i+1);scanf(%d%d%d,&Stav,&Endv,&Wei
9、ght);pGraph-ArcsEndvStav=Weight;pGraph-ArcsStavEndv=Weight;printf(ttt创建景区景点分布图成功!n);printf(ttt按任意键回主菜单!);getch();return SUCCESS;输出景区景点分布图步骤图:程序:/输出景区景点分布图STATUS PrintGraph(const PGRAPH pGraph)printf(ttt_n);printf(nttt$t显示景区景点分布图t$n);printf(ttt_nn);/printf(t景区景点名称.nt);for(int i=0;iVexNum;i+)printf(%s
10、t,pGraph-Vexsi);printf(nnt景区景点信息.n);for(i=0;iVexNum;i+)printf(t_nt);for(int j=0;jVexNum;j+)if(pGraph-Arcsij=INF)printf(t);elseprintf(%dt,pGraph-Arcsij);printf(n);printf(t_nt);printf(按任意键回主菜单!);getch();return SUCCESS;输出景区导游线路图图遍历从图中某一顶点出发访遍图中全部顶点,且使每个顶点仅被访问一次,这一过程就叫做图遍历 (Traversing Graph)。图中可能存在回路,且图
11、任一顶点全部可能和其它顶点相通,在访问完某个顶点以后可能会沿着一些边又回到了曾经访问过顶点。为了避免反复访问,可设置一个标志顶点是否被访问过辅助数组 visited 。辅助数组 visited 初始状态为 0, 在图遍历过程中, 一旦某一个顶点 i 被访问, 就立即让 visited i 为 1, 预防它被数次访问。两种图遍历方法:深度优先搜索 DFS (Depth First Search)广度优先搜索 BFS (Breadth First Search)广度优先搜索遍历图(BFS)对连通图,从起始点V到其它各顶点肯定存在路径。 其中,V-w1, V-w2, V-w8 路径长度为1; V-w
12、7, V-w3, V-w5 路径长度为2; V-w6, V-w4 路径长度为3从图中某个顶点V0出发,并在访问此顶点以后依次访问V0全部未被访问过邻接点,以后按这些顶点被访问前后次序依次访问它们邻接点,直至图中全部和V0有路径相通顶点全部被访问到。 若此时图中还有顶点未被访问,则另选图中一个未曾被访问顶点作起始点,反复上述过程,直至图中全部顶点全部被访问到为止。步骤图:程序: /输出景区导游线路图(注:广度优先遍历)STATUS TraverseGraph(const PGRAPH pGraph)printf(ttt_n);printf(nttt$t输出景区导游线路图t$n);printf(t
13、tt_nn);/定义访问标志数组bool* Visit=(bool*)malloc(pGraph-VexNum*sizeof(bool);/初始化访问标志数组为falsefor(int i=0;iVexNum;i+)Visiti=false;/定义队列、并初始化队列QUEUE Queue;if(InitQueue(&Queue,pGraph-VexNum)=FAILURE)printf(ttt警告:创建队列失败!n);printf(ttt按任意键回主菜单!);getch();return FAILURE;/定义访问顶点变量,并初始值为0int Vertex=0;doif(!VisitVerte
14、x)printf(ttt%s景点.n,pGraph-VexsVertex);/标志访问过VisitVertex=true;/遍历和Vertex相连顶点并进队for(i=0;iVexNum;i+)if(Visiti=false&pGraph-ArcsVertexi!=INF)EnQueue(&Queue,i);/出队DeQueue(&Queue,&Vertex);while(QueueLen(&Queue);/销毁队列DestroyQueue(&Queue);printf(ttt按任意键回主菜单!);getch();return SUCCESS;有向图拓扑排序何谓“拓扑排序”? 对有向图进行以下
15、操作:假设G=(V,E)是一个含有n个顶点有向图,V中顶点序列vl,v2,vn称做一个拓扑序列(Topological Order),当且仅当该顶点序列满足下列条件:若在有向图G中存在从顶点vi到vj一条路径,则在顶点序列中顶点vi必需排在顶点vj之前。通常,在AOV网中,将全部活动排列成一个拓扑序列过程叫做拓扑排序(Topological Sort)。在AOV网中不应该出现有向环。因为环存在意味着某项活动将以自己为先决条件,显然无法形成拓扑序列。判定网中是否存在环方法:对有向图结构其顶点拓扑有序序列,若网中全部顶点全部出现在它拓扑有序序列中,则该AOV网中一定不存在环。比如:对于有向图 可求
16、得拓扑有序序列: A B C D 或 A C B DBcDA比如, 对学生选课工程图进行拓扑排序, 得到拓扑有序序列为 C1 , C2 , C3 , C4 , C5 , C6 , C8 , C9 , C7或 C1 , C8 , C9 , C2 , C5 , C3 , C4 , C7 , C6 反之,对于下列有向图 不能求得它拓扑有序序列。 因为图中存在一个回路 B, C, D 怎样进行 ?输入AOV网络。令 n 为顶点个数。 (1)在AOV网络中选一个没有直接前驱顶点,并输出之; (2)从图中删去该顶点, 同时删去全部它发出有向边;反复以上步骤,直到全部顶点均已输出,拓扑有序序列形成,拓扑排序
17、完成;或图中还有未输出顶点,但已跳出处理循环。这说明图中还剩下部分顶点,它们全部有直接前驱,再也找不到没有前驱顶点了。这时AOV网络中肯定存在有向环。在实现拓扑排序算法中,采取邻接表作为有向图存放结构,每个顶点设置一个单链表,每个单链表有一个表头结点,在表头结点中增加一个存放顶点入度域count,这些表头结点组成一个数组。为了避免反复检测入度为0点,另设一栈存放全部入度为0点。对于有n个顶点和e条边有向图而言,for循环中建立入度为0顶点栈时间为O(n);若在拓扑排序过程中不出现有向环,则每个顶点出栈、入栈和入度减1操作在while循环语句中均实施e次,所以拓扑排序总时间花费为O (n+e)。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 景区 旅游 信息 综合 管理 系统
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内