基于数据结构的校园导游咨询系统课程设计报告
校园导游程序设计

《数据结构课程设计》报告课题名称:校园导游程序专业:班级:学号:姓名:2012 年12 月31 日目录目录 (1)1 前言 (2)2需求分析 (3)3概要设计 (3)4详细设计 (3)5源代码及调试 (3)6特殊问题解决方法 (8)7使用说明及测试结果 (9)8结论 (11)9总结与体会 (11)10参考文献 (11)1 前言1.1 课题简介课程设计题目名称:校园导游程序课程设计目的:通过《数据结构》课程的学习,将数据结构应用在具体的编程方面,更加了解课程所学习的内容及思维逻辑。
课程设计意义:利用数据结构课程设计,了解学生对《数据结构》的理解和加强学生对数据结构方面的应用知识。
希望今后学生好好利用数据结构的知识和思想,解决各方面的编程难题。
课程设计内容:实现存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
为来访客人提供图中任意景点相关信息的查询。
为来访客人提供景点的问路查询,即已知一个景点,查询到某景点之间的一条最短路径及长度。
课程设计预期实现效果:(1)设计学校的校园平面图,所含景点不少于10个,以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
(2)为来访客人提供图中任意景点相关信息的查询。
(3)为来访客人提供景点的问路查询,即已知一个景点,查询到某景点之间的一条最短路径及长度。
1.2 方案及其论证语言:C++运行环境:Microsoft Visual C++ 6.0可行性分析:模拟一个小型的计算器界面,能够输入数学表达式并计算出表达式的结果。
2需求分析实现存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
为来访客人提供图中任意景点相关信息的查询。
为来访客人提供景点的问路查询,即已知一个景点,查询到某景点之间的一条最短路径及长度3概要设计(特殊功能)3对于本次编程的概要设计,有如下内容:功能设计1:景点查询功能设计2: 查询最短路径。
数据结构课程设计报告(校园导游系统)附有源代码

课程论文(设计)2011-2012学年第2学期课程名称:数据结构课程设计课程性质:实践课专业班级:考核方式:考查学生姓名:学号:学时:1周教师姓名:目录1. 作业内容 (1)2. 基本思路 (1)2.1 本校10个景点 (1)2.2 图的初始化 (2)2.3 图的遍历 (2)2.4 求最短路径 (3)3.系统流程 (4)3.1 系统的简单说明 (4)3.2 系统流程图 (5)4. 系统运行效果图 (5)4.1 校园导游界面 (5)4.2 华农校园地图 (6)4.3 景点的相关信息查询 (6)4.4 任意两个景点间的最短路径 (7)4.5 退出校园导游系统 (8)5.总结 (9)6.参考文献 (10)1. 作业内容设计一个校园导游程序,为来访客人提供各种信息查询任务。
基本要求:(1)设计你所在学校的校园平面图,所含景点不少于10个。
以图中顶点表示校内各景点,存放景点名称、代号、简介信息,以边表示路权,存放路径长度等相关信息。
(2)为来访客人提供图中任意景点相关信息的查询(3)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
2. 基本思路要完成对整个导游图系统的功能实现,需要对的每一项功能都有清楚的设想和认识,了解并明确每一项功能的实现需要解决的问题,选择正确并且高效的算法把问题逐个解决,最终实现程序的正确调试运行。
有以下设计思路:(1).结合本校的实际情况,选出10个景点;(2).人为手工为选出的10个景点赋上相关信息(名称、代号、简介信息、以及路权等等);(3).根据选出来的10个景点用邻接矩阵存储校园图。
(4).依照景点的相关信息创建校园图。
(5).把纸质上的内容,利用C++编程语言编写查找景点相关信息的程序。
(6).根据人为赋值的路权,迪杰斯特拉算法计算任意两点之间的最短路径。
(7).综上所诉,用一个主函数把这些板块合成,生产一个菜单界面呈现在用户面前。
为此,可把系统分为以下几个核心:图的初始化、图的遍历、求最佳路线。
数据结构试验报告校园导游

数据结构试验报告校园导游《数据结构》课程设计报告课程名称:《数据结构课程设计》;课程设计题⽬:校园导游查询;姓名:张晓艺;院系:计算机学院;专业:数字媒体技术;年级:⼤⼆;学号:10054220;指导教师:王⽴波;2011年12⽉17⽇1 课程设计的⽬的 (x)2 需求分析 (x)3 课程设计报告内容 (x)1、概要设计 (x)2、详细设计 (x)3、调试分析 (x)4、⽤户⼿册 (x)5、测试结果 (x)6、程序清单 (x)4 ⼩结 (x)5 参考⽂献 (x)1.课程设计的⽬的:(1)熟练运⽤C++编写程序;(2)会⽤Floyd算法查找最短路径;2.需求分析:1.题⽬:【校园导游咨询】[问题描述](1)设计你的学校的校园平⾯图,所含景点不少于10个。
以图中顶点表⽰学校各景点,存放景点名称、代号、简介等信息;以边表⽰路径,存放路径长度等相关信息。
(2)为来访客⼈提供图中任意景点的问路查询,即查询任意两个景点之间的⼀条最短的简单路径。
(3)为来访客⼈提供图中任意景点相关信息的查询。
[测试数据]由读者根据实际情况指定。
2.任务:通过此程序可实现以下功能:(1)⽤⼀维数组存放景点信息,⼆维数组存放景点间的距离,最短距离,最短路径;(2)Floyd算法计算最短距离和路径;(3)根据景点序号查询景点的⼀系列信息,及两景点间的最短路径和最短距离。
3.测试数据:查询类型:I(表⽰查询景点信息);景点编号:3;查询类型:D(表⽰查询景点间的最短路径和最短距离);景点编号:1 9;3. 课程设计报告内容:1. 概要设计:(1)⾸先我画了学校主要⼏个景点的分布图以及⾃⼰定的⼀些距离,图如下:(2)接着我定义了⼀个顶点结构体,定义如下:struct Date{int num; //景点编号char name[50]; //景点名称char introduce[100]; //景点介绍};(3)然后我定义了⼀个类,定义如下:class Travel{private:Date date[15];int distance[15][15];int Path[15][15];int ShortestDistance[15][15];void Floyd();public:Travel();~Travel(){}void Introduce(int);void Scanf();void ShortDistance(int,int);};(4)基本操作:void Floyd(); //Floyd算法,计算最短路径和最短距离Travel(); //构造函数~Travel(){} //析构函数void Introduce(int); //介绍景点函数void Scanf(); //外部输⼊函数void ShortDistance(int,int); //最短距离计算函数本程序分为2个模块:Int main(){初始化;Void Scanf();}函数调⽤关系基本结构图如下所⽰:2. 详细设计:(1)主函数初始化变量;(2)调⽤外部接⼝函数Scanf();(3)输⼊查询类型,如果为“I”,调⽤景点介绍函数,如果为“D”,调⽤最短距离和路径函数。
数据结构课程设计--校园导游咨询【范本模板】

琼州学院电子信息工程学院课程设计报告课程名称: 《数据结构》课程设计设计题目:校园导游咨询专业:软件工程班级:2010软件工程学生姓名:学号:起止日期:指导教师:琼州学院本科生课程设计注意事项注意事项一、设计目的《数据结构》是一门实践性较强的软件基础课,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。
本课程设计的目的就是要达到理论与实际应用相结合,使同学们能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能。
二、设计要求1.通过这次课程设计,要求在数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实现等方面加深课程基本内容的理解。
同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
2.学生必须仔细研读《数据结构》课程设计要求,以学生自学为主、指导教师指导为辅,独立完成课程设计的任务,有问题及时主动与指导教师沟通。
3.本次课程设计按照教学要求需要在本学期15周前完成,学生要发挥自主学习的能力,充分利用时间,安排好课程设计的时间计划,并在课程设计过程中不断检测自己的计划完成情况,及时向指导教师汇报。
4.编程语言:C 语言。
三、课程设计说明书的格式要求设计文档的撰写必须提前进行,以保证使文档与程序同步提交。
1.设计题目2.运行环境(软、硬件环境)3.算法的需求分析4.算法概要设计5.算法详细设计6.算法的测试7.运行结果分析8.收获及体会四、问题分析、设计和测试过程要规范化1.需求分析:将题目中要求的功能进行叙述分析。
2.概要设计:算法的设计说明,描述解决此问题的数据存储结构,(有些题目已经指定了数据存储的,按照指定的设计),描述算法建议使用流程图,进行算法分析指明关键语句的时间复杂度。
3.详细设计:即各个算法的具体实现步骤,每个题目要有相应的源程序,其中每个功能模块采用不同的函数实现。
数据结构校园导游咨询系统课程设计报告及课程总结.doc

姓名:班级:学号:指导教师:2012年12月目录1、需求分析 (1)1.1 系统简介 (1)1.2 系统功能模块介绍 (1)2、概要设计 (1)2.1 系统功能结构图 (1)2.2 系统流程图 (2)2.3 主要函数概要设计 (3)2.3.1 主函数概要设计 (3)2.3.2 初始化图函数InitGraph() (3)2.3.4 查询景点信息函数设计SearchGraph() (4)2.3.5 显示图中信息函数设计ShowGraph() (4)2.3.6 弗洛伊德算法函数设计Floyd() (4)3、详细设计 (4)3.1 主函数详细设计 (4)3.2初始化图函数详细设计InitGraph() (5)3.3查询景点信息函数详细设计SearchGraph() (6)3.4 弗洛伊德算法函数详细设计Floyd() (7)4、调试分析 (8)4.1 显示主界面函数测试 (8)4.2 查找两景点间最短路径测试 (9)4.3 查看景点信息测试 (10)5.课程设计总结 (11)6、附录 (12)1、需求分析1.1 系统简介随着现代社会生活节奏的加快,人们外出旅行以寻求放松的时间越来越多。
考虑到游客不可能对所有景点都有所了解,因此可能无法找到游玩景点最省时,最高效的路径,而人工导游成本又过高,故使用C语言,基于《数据结构》中图的相关算法开发了“江西农业大学校园咨询系统”。
开发本系统目的在于为来访我校的游客提供一条最短游览路径,本系统从实际出发,通过对校园平面图的分析,将其转化为数据并保存在系统中,因此系统提供的路径具有较大的可信性。
本系统界面友好,提示信息充分,在实际使用过程中运行良好。
1.2 系统功能模块介绍本系统主要分为以下三大功能模块:1、查询两景点最短路径:用户在选择此功能模块后,按照屏幕上方提示的景点名称及其对应的编号,要求用户输入起点和终点的编号,系统将在已存储的景点中进行匹配,若未找到所需查询的景点编号,系统将提示错误并要求用户再次输入。
(完整word版)校园导游系统课程设计

西安邮电大学(计算机学院)数据结构课程设计报告题目:校园导游系统专业名称:班级:学生姓名:学号(8位):指导教师:设计起止时间:一. 设计目的1.数据结构课程设计是让学生综合运用数据结构课程中学到的几种典型数据结构,以及程序设计语言(C语言),自行实现一个较为完整的应用系统的设计与开发2.通过课程设计,使学生通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。
3.学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。
二. 设计内容1.完成校园导游咨询系统。
2.校园平面图(景点、路径等信息)3.利用深度优先和广度优先搜索搜索所有景点4.查询图中任意景点的相关信息5.问路信息(查询任意两个景点之间的一条最短的简单路径,任意两景点之间的所有路径)校园图的关节点、多个景点的最佳访问路线6.校园导游图的界面仿真。
7.添加删除道路信息。
三.概要设计1.功能模块图;选择显示标识信息2.各个模块详细的功能描述。
1.登录模块进入后可添加删除道路信息。
2.路线选择模块选择路线,在右侧窗口显示最短路径3.其他查询景点信息,查看深度优先遍历查看广度优先遍历四.详细设计*重点设计及编码//结点function Node(vexdata){this.vexdata=vexdata;this.node=[];this.weight=[];}//类定义function AdjList(vexnum,arr){this.vexnum=vexnum;this.arcnum=0;this.vertex=[];=[];//名称r=[];//信息this.flag=[];//标记this.arr=[];//存储路径this.ar=[];//存储路径2for(var i=0;i<this.vexnum;i++){this.vertex[i]=new Node(arr[i]);this.flag.push(0);}//增加结点this.addarc=addarc;//增加边this.addvex=addvex;//深度优先搜索this.dfs=dfs;this.edfs=edfs;//广度优先搜索this.guangdu=guangdu;this.guang=guang;//输出存储结构this.printf=printf;//求最短路径this.getpath=getpath;//输出景点信息函数this.printinfor=printinfor;}function addarc(a1,a2,weight){this.vertex[a1].node.push(a2);this.vertex[a1].weight.push(weight);this.vertex[a2].node.push(a1);this.vertex[a2].weight.push(weight);this.arcnum++;}function addvex(v){var temp=new Node(v);this.vertex.push(temp);this.vexnum++;}function edfs(flag,v,g,arr){arr.push(v);flag[v]=1;for(var i=0;i<g.vertex[v].node.length;i++){if(1!=flag[g.vertex[v].node[i]]){edfs(flag,g.vertex[v].node[i],g,arr);}}}function dfs(){var temp=parseInt(document.getElementById('last').value);this.arr=[];for(var i=0;i<this.vexnum;i++)this.flag[i]=0;edfs(this.flag,temp,this,this.arr);for(var i=0;i<this.vexnum;i++){if(this.flag[i]!=1) edfs(this.flag,i,this,this.arr);}var showpath="<b>深度遍历路线:</b>";for(var i=0;i<this.arr.length;i++){showpath+="->";showpath+=[this.arr[i]];}document.getElementById('footer').innerHTML=showpath; }function guangdu(temp,g){var v,k,w=temp;var que=[];que.push(w);g.flag[w]=1;while(que.length!=0){w=que[0];g.ar.push(que[0]);que.splice(0,1);k=0;v=parseInt(g.vertex[w].node[k++])while(k<g.vertex[w].node.length){if(g.flag[v]!=1){g.flag[v]=1;que.push(v);}v=parseInt(g.vertex[w].node[k++]);}}}function guang(){var temp=parseInt(document.getElementById('last').value);this.ar=[];for(var i=0;i<this.vexnum;i++)this.flag[i]=0;guangdu(temp,this);for(var i=0;i<this.vexnum;i++)if(this.flag[i]!=1)guangdu(i,this);var showpath="<b>广度遍历路线:</b>";for(var i=0;i<this.ar.length;i++){showpath+="->";showpath+=[this.ar[i]];}document.getElementById('footer').innerHTML=showpath; }function printf(){for(var i=0;i<this.vexnum;i++){document.write('<br>'+this.vertex[i].vexdata+" :");for(var j=0;j<this.vertex[i].node.length;j++)document.write('->'+this.vertex[i].node[j]+":"+this.vertex[i].weight[j]);}}function getpath(/*start,end*/){var start=parseInt(document.getElementById('first').value);var end=parseInt(document.getElementById('last').value);var mindist;var k;var a=[];var path=new Array(this.vexnum);//初始化for(var i=0;i<this.vexnum;i++){document.getElementById('b'+i).style.color='#000';}for(var i=0;i<this.vexnum;i++){path[i]=[];}for(var i=0;i<this.vexnum;i++){a[i]=10000;path[i][0]=0;}path[start][0]=1;for(var i=0;i<this.vertex[start].node.length;i++){a[this.vertex[start].node[i]]=this.vertex[start].weight[i];path[this.vertex[start].node[i]].push(start);}//找各条最短路径for(var i=1;i<this.vexnum;i++){mindist=10000;//找最小权值路径for(var j=0;j<this.vexnum;j++){if(!path[j][0]&&a[j]<mindist){k=j;mindist=a[j];}}if(10000==mindist) return;path[k][0]=1;//改变记录for(var j=0;j<this.vertex[k].node.length;j++){if(!path[this.vertex[k].node[j]][0]&&a[this.vertex[k].node[j]]>a[k]+this.vertex[k].weight[j]){a[this.vertex[k].node[j]]=a[k]+this.vertex[k].weight[j];path[this.vertex[k].node[j]]=[0];for(var t=1;t<path[k].length;t++){path[this.vertex[k].node[j]].push(path[k][t]);}path[this.vertex[k].node[j]].push(k);}}}//返回最短路径var showpath="路线:";for(var i=1;i<path[end].length;i++){document.getElementById('b'+path[end][i]).style.color='#fff';showpath+=[path[end][i]];showpath+="->";}document.getElementById('b'+end).style.color='#fff';showpath+="<b>"+[end]+"</b>";document.getElementById('path').innerHTML=showpath;}function printinfor(){var last=document.getElementById('last').value;document.getElementById('footer').innerHTML=r[parseInt(last)]; }五.测试数据及运行结果六.调试情况,设计技巧及体会每当写完一个函数的时候,都会出现很多错误,就这样坚持着改错误,慢慢的发现其实很多是由于自己粗心造成的,别的错误改多了就习惯了。
数据结构校园导游咨询系统课程设计报告及课程总结解读

姓名:班级:学号:指导教师:2012年12月目录1、需求分析 (1)1.1 系统简介 (1)1.2 系统功能模块介绍 (1)2、概要设计 (2)2.1 系统功能结构图 (2)2.2 系统流程图 (2)2.3 主要函数概要设计 (3)2.3.1 主函数概要设计 (3)2.3.2 初始化图函数InitGraph() (4)2.3.4 查询景点信息函数设计SearchGraph() (4)2.3.5 显示图中信息函数设计ShowGraph() (4)2.3.6 弗洛伊德算法函数设计Floyd() (5)3、详细设计 (5)3.1 主函数详细设计 (5)3.2初始化图函数详细设计InitGraph() (6)3.3查询景点信息函数详细设计SearchGraph() (7)3.4 弗洛伊德算法函数详细设计Floyd() (8)4、调试分析 (9)4.1 显示主界面函数测试 (9)4.2 查找两景点间最短路径测试 (10)4.3 查看景点信息测试 (11)5.课程设计总结 (12)6、附录 (13)1、需求分析1.1 系统简介随着现代社会生活节奏的加快,人们外出旅行以寻求放松的时间越来越多。
考虑到游客不可能对所有景点都有所了解,因此可能无法找到游玩景点最省时,最高效的路径,而人工导游成本又过高,故使用C语言,基于《数据结构》中图的相关算法开发了“江西农业大学校园咨询系统”。
开发本系统目的在于为来访我校的游客提供一条最短游览路径,本系统从实际出发,通过对校园平面图的分析,将其转化为数据并保存在系统中,因此系统提供的路径具有较大的可信性。
本系统界面友好,提示信息充分,在实际使用过程中运行良好。
1.2 系统功能模块介绍本系统主要分为以下三大功能模块:1、查询两景点最短路径:用户在选择此功能模块后,按照屏幕上方提示的景点名称及其对应的编号,要求用户输入起点和终点的编号,系统将在已存储的景点中进行匹配,若未找到所需查询的景点编号,系统将提示错误并要求用户再次输入。
(完整word版)数据结构课程设计校园导游咨询

9、校园导游咨询问题描述:设计一个校园导游程序,为来访的客人提供各种信息查询服务。
基本要求:⑴设计华东交通大学的校园平面图,所含景点不少于10个。
以图中顶点表示校内各景点,⑵存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
⑶为来访客人提供图中任意景点相关信息的查询。
⑷为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
#include <stdio.h>#define MAXV 100 //最大顶点个数#define INF 32767 //用32767表示∞#include <stdlib.h> //调用函数system改变字体颜色的头文件typedef int InfoType;#define MAXV 100 //最大顶点个数//以下定义邻接矩阵类型typedef struct{ int no; //顶点编号InfoType info; //顶点其他信息} VertexType; //顶点类型typedef struct //图的定义{ int edges[MAXV][MAXV]; //邻接矩阵int vexnum,arcnum; //顶点数,弧数VertexType vexs[MAXV]; //存放顶点信息} MGraph;void ecjtumap()//建立华东交通大学地图{ printf("\t|-------------------------------------------------------------|\n");printf("\t| |\n");printf("\t| |\n");printf("\t| ---------- |\n");printf("\t| ==============================| 国防生宿舍| |\n");printf("\t| 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
重庆科技学院课程设计报告院(系):_电气与信息工程学院专业班级:计科普0902学生姓名:周杨学号: 2009441622设计地点(单位)____计算机基础自主学习中心I306___设计题目:_________校园导游咨询____________________ 完成日期: 2011 年 1 月 14 日指导教师评语: _______________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________ __________ _成绩(五级记分制):______ __________指导教师(签字):________ ________重庆科技学院课程设计任务书设计题目:校园导游咨询教研室主任:指导教师:向毅、陈刘奎、熊茜2010年 12 月 20日摘要现代快节奏的生活使得都市人越来越渴望亲近自然,因此外出旅游现在被越来越多的都市人所看中,所以如何快速方便的找到我们想要的旅游景点的信息和最短路径就成了一个很重要的问题。
本设计基于图的结构,创建一个无向图,针对游客的实际需求,将重庆科技学院的景点编号、名称、介绍等信息放入到图的顶点当中并保存在景点文本文件当中,将两个景点的编号和它们之间的距离当作权值也保存到权值文本文件当中,利用迪杰斯特拉算法来求从一个景点到另一个景点的最短距离,利用strcmp();函数来查找景点,并显示出它的信息,从而解决了要查找景点信息和景点之间的最短路径的问题,最后按照显示屏上的提示进行相关的操作。
关键词:无向图、查找信息、最短距离、校园导游咨询目录摘要 (I)1 设计内容和要求 (1)1.1设计内容 (1)1.1设计要求 (1)2 概要设计 (2)2.1 程序的模块图 (2)2.2 主函数的概要设计 (3)2.3 查找介绍函数的概要设计 (3)2.4 查找最短路径函数的概要设计 (3)2.5 退出函数的概要设计 (3)3 详细设计 (4)3.1 程序的流程图 (4)3.2 主函数的详细设计 (5)3.3 查找介绍函数的详细设计 (5)3.4 查找最短路径函数的详细设计 (6)3.5 退出函数的详细设计 (8)3.6 数据结构的详细设计 (8)4 软件测试 (10)4.1 菜单的测试 (10)4.2 查找景点简介的测试 (10)4.3 查找两个景点之间的最短距离的测试 (11)4.4 退出的测试 (11)5 软件使用说明 (12)6 致谢 (13)7 参考文献 (14)8 附录 (15)1 设计内容和要求1.1设计内容依据课程设计的要求,利用一个无向图的结构,将景点当作图的顶点,将景点之间的距离当作权值来储存,然后根据游客自己的需求,按照显示屏上的提示来进行查找景点介绍,查找两个景点之间的最短距离,退出程序等基本操作。
1.1设计要求本软件为校园导游咨询系统,根据游客的实际需求而设计,首先创建一个无向图,然后从文件当中读取所有景点的编号、名称、介绍和两点之间的权值,并将它们写入到无向图当中。
功能主要包括查找已知景点的信息,查找从一个景点到另一个景点的最短路径,退出等基本操作。
软件的界面要求使用VC++6.0的运行环境。
软件的数据库包括校园景点的编号、名称、介绍和两个景点之间的距离(权值),首先要定义顶点的数据类型结构体,里面包括景点的编号、名称、介绍,然后定义一个邻接矩阵结构体来储存边的信息,最后定义一个无向图类型的结构体来储存顶点的信息,边的信息,顶点的个数,边的个数。
最后游客按照显示屏上的提示来进行相关的操作。
2 概要设计2.1 程序的模块图本软件的算法依据无向图的操作通过查找函数查找景点的信息,通过迪杰斯特拉函数来查找最短距离,开始时首先从文件当中读取景点的编号、名称、介绍和两个景点之间的距离即权值,然后将其加入到图当中,再调用查找函数查找景点的信息,调用迪杰斯特拉函数来查找最短距离,调用退出函数实现退出功能,其模块图如图2.5所示:图2.5模块图2.2 主函数的概要设计基于程序的操作要求,对于主函数的设计首先是显示一个可视化的操作界面提醒游客进行相关的操作和提示游客其可供选择的景点的名称,便于其在后面的操作过程当中能够快速方便的找到其需要查找的景点的名称。
而后就是一个switch();的选择函数,提供查找景点信息,查找两个景点之间的最短距离和退出的相关的选择操作而后进入到每一个操作界面当中,从而实现所需要的功能。
2.3 查找介绍函数的概要设计当游客选择了要查找景点的信息的介绍这一项功能的时候,就会进入到查找的界面,对于查找景点信息就是利用strcmp();函数,当游客输入景点的名称的时候看其是否与文件当中的数据相匹配,如果有则输出它的介绍,如果没有则输出错误的提示提醒游客进行相关的操作来进入到正确的操作过程当中。
2.4 查找最短路径函数的概要设计对于查找最短路径的这一项功能,则是利用迪杰斯特拉函数(1)假设用带权的邻接矩阵arcs来表示带权的有向图,arcs[i][j]表示弧(vi,vj)上的权值。
若(vi,vj)不存在,则置arcs[i][j]为无穷大。
S为已找到从v出发的最短路径的终点集合,它的初始状态为空集。
那么,从v出发到图上其余各个定点vi可能到达的最短路径长度的初始值为:D[i] = arcs[v][i];(2)选择vj,使得D[j] = Min{D[i] | vi ∈ V – S}vj就是当前求得的一条从v出发的最短路径的终点。
令S = S ∪ {j};(3)修改从v出发到集合V – S 上任意顶点vk可到达的最短路径的长度。
如果D[j] + arcs[j][k] < D[k]则修改D[k]为D[k] = D[j]+arcs[j][k];(4)重复操作(2)、(3)共n – 1 次,由此求得从v到图上其余各个顶点的最短路径是依路径长度递增的序列。
从而求得了从一个景点到另一个景点的最短路径的问题。
2.5 退出函数的概要设计关于退出函数,则是当游客执行完了他想要进行的操作过后选择退出的功能的时候就调用退出函数exit(0);跳入到退出界面实现退出的功能。
3 详细设计3.1 程序的流程图当我们想要更加实际的了解一个程序的算法过程的时候,我们就要依据程序的流程图来给我们一个比较实际的过程,从流程图当中能够更加清楚整个程序实现的过程是怎样的。
其流程图如图3.1所示:图3.1流程图3.2 主函数的详细设计主函数是一个程序的主体,当我们要进行我们所需要的操作的时候我们就要根据主函数中的显示信息和它给我们的相关的提示信息来进行所需要的操作,因此在这次的程序实现的过程当中,首先调用CreateUDN(G);函数创建一个无向图,然后利用一个for();循环语句for(int k = 0; k < G.vexnum; k++){if(k - 5 == 0){cout<<endl;cout<<""<<'\t'<<G.vexs[k].name;}else{cout<<""<<'\t'<<G.vexs[k].name;}}将景点的名称打印在显示屏上,最后是一个switch();的选择语句,提示游客根据选择来进入到相关的操作界面实现程序的基本功能。
3.3 查找介绍函数的详细设计当游客选择了要查找景点的信息的介绍这一项功能的时候,程序就会调用DisIntroduction(G);函数进入到查找景点的介绍的界面,当游客输入了需要查找的景点的名称的时候,程序利用for();循环语句来查找是否有这个景点for(int i=0;i<G.vexnum;i++){int m = strcmp(G.vexs[i].name,n1);if(m==0){v1=i;count1=count1+1;}},找到将它的编号返回,并输出它的介绍,没有找到这输出错误提示,提醒游客进行相关的操作进入正确的操作过程当中。
3.4 查找最短路径函数的详细设计当游客选择了要查找两个景点之间的最短距离这一项功能的时候,程序就会调用DisPath(G);函数进入到查找两个景点之间的最短距离的操作界面当中,当游客输入了两个景点的名称过后,程序会调用strcmp();函数查看是否有这两个景点,如果有则返回他们各自的编号,并调用ShortPath_DIJ(G,v1,v2);函数进入到查找最短路径问题的程序当中。
for(v=0;v<G.vexnum;v++)//各对节点之间初始已知路径及距离{final[v]=FALSE;//从V出发的最短路径的空集合D[v]=G.arcs[v0][v];//从V出发到图上其余各个定点v0可能到达的最短路径的初始值for(w=0;w<G.vexnum;w++){P[v][w]=FALSE;//设空路径}if(D[v]<MAXNUM){P[v][v0]=TRUE;P[v][v]=TRUE;}}D[v0]=0;final[v0]=TRUE;int a[20];for(i=0;i<G.vexnum;i++)//对Path[i][j]进行初始化,使其值全部为1000,便于后期的判断{for(j=0;j<G.vexnum;j++){Path[i][j]=1000;}}for(i=0;i<G.vexnum;i++)//对数组进行初始化,以便对Path[i][j]进行描述{a[i]=1;for(v=0;v<G.vexnum;v++)//各条路线的初始节点为v0{Path[v][0]=v0;}//开始主循环,每次求解得到v0到某个v顶点的最短路径,并加入到S集合中for(i=1;i<G.vexnum;i++)//其余G.vexnum - 1个顶点{m=MAXNUM;//当前所知的离v0最近的距离for(w=0;w<G.vexnum;w++){if(!final[w])//w顶点在V-S中{if(D[w]<m)//w顶点离v0顶点更近{v=w;m=D[w];}}}Path[v][a[v]]=v;//离v0顶点最近的v加入s集合final[v]=TRUE;for(w=0;w<G.vexnum;w++)//更新当前最短路径及距离{if((!final[w])&&(m+G.arcs[v][w]<D[w])){D[w]=m+G.arcs[v][w];//修改当前的最短路径的值int k0=1;a[w]=1;while(Path[v][k0]!=1000)//如果上述条件成立,Path[w]路径需要改变,因为从v0到w的路径显然经过了v0和v之间的所有的点(包括v){Path[w][k0]=Path[v][k0];k0++;a[w]++;}}}}cout<<"两个景点之间的最短路径为:"<<'\t';int k=0;while(Path[v2][k]!=1000)int m=Path[v2][k];cout<<G.vexs[m].name<<'\t';k++;}cout<<endl;cout<<"两个景点之间的最短距离为: "<<D[v2]<<"M"<<endl;cout<<"请选择要进行的操作(I:查询景点信息,P:查询两个景点之间的最短路径,Q:退出)"<<endl;(1)假设用带权的邻接矩阵arcs来表示带权的有向图,arcs[i][j]表示弧(vi,vj)上的权值。