数据结构-校园导游程序(附源码)
数据结构(C语言版)实验报告 (校园导游咨询)
《数据结构与算法》实验报告一、需求分析【问题描述】设计一个校园导游程序,为来访的客人提供各种信息查询服务。
【基本要求】(1)设计你所在学校的校园平面图,所含景点不少于10个。
以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
(2)为来访客人提供图中任意景点相关信息的查询。
(3)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一个最短的简单路径。
【测试数据】由读者根据实际情况指定。
【实现提示】一般情况下,校园的道路是双向通行的,可设校园平面图是一个无向网。
顶点和边均含有相关信息。
【选作内容】(6)扩充每个景点的邻接景点的方向等信息,使得路径查询结果能提供详尽的导向信息。
二、概要设计1)抽象数据类型定义描述#include<iostream>using namespace std;const int MaxSize=18;const int INFINITY=65535;//最大值无穷class direction;template <class T> class MGraph;template <class T>class VertexNode//定义景点结点,存储景点信息{friend class MGraph<T>;public:int vex;//景点名称T vexname;//景点名称T vexinf;//景点信息direction dir;//存放景点方位信息的direction类的dir。
};class direction{public:int ln;//存放在方向图中的横坐标,表示东西int col;//存放在方向图中的纵坐标,表示南北};template <class T>class MGraph//定义无向图的邻接矩阵{public:MGraph();//构造函数,初始化具有n个顶点的图void printvexname();//显示所有景点及景点代号void printvexinf(int i);//显示代号为i景点的名称及信息void printroad(int i,int j);//显示景点i~j的最短路径方案信息void printdir(int i,int j);//显示景点i到j的方向信息,如“向东100m,向南200m”VertexNode<T> adjlist[MaxSize]; //存放景点全部信息的景点类数组int vertexNum,arcNum; //图的顶点数和边数void Root(int p,int q);//递归寻找pq间的最短路径int Path[MaxSize][MaxSize],Dist[MaxSize][MaxSize];//创建Path和Dist分别存放两点间最短路径的前驱节点,两点间最短路径长度int Line[MaxSize];//Line存放路径int kkk;//在floyed算法中,做Line[]数组的标记private:T vertex[MaxSize]; //存放图中顶点的数组int arc[MaxSize][MaxSize];//存放图中边的数组};2)功能模块设计(如主程序模块设计)int funcchoice()//系统功能选择页面{int choice;cout<<"=============================================================="<<endl;cout<<" 欢迎进入校园导游咨询平台"<<endl;cout<<" 1--显示校园所有景点信息"<<endl;cout<<" 2--查询校园景点信息"<<endl;cout<<" 3--问路查询系统"<<endl;cout<<" 4--退出导游资讯平台"<<endl;cout<<"=============================================================="<<endl;cout<<"请输入要选择的功能号:";cin>>choice;return choice;}3)模块层次调用关系图三、详细设计//程序的头文件#include<iostream>#include<iomanip>#include"guide.h"using namespace std;template <class T>MGraph<T>::MGraph()//a[]为景点代号,b[]为景点名称,c[]为景点信息,d[]为景点方位信息的横坐标,e[]为景点方位信息的纵坐标,s[]为存放景点邻接矩阵信息的一维数组,根据其对称性可以用公式赋值给二维数组arc[][]{i nt s[]={0,1,0,0,2,0,0,0,2,0,0,0,2,3,0,0,0,0,4,2,0,0,0,0,0,2,3,0,0,0,0,0,2,3,1,0,0,0,2,0,2,0,0,2,0,4,0,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,2,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0,2,0};i nt a[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};c har* b[]={"南门","实验楼","南图","大活","睿思楼","大礼堂","南4教","知行楼","国交楼","南3教","南2教","南1教","北图","北3教","北4教","北2教","北1教","北门"};c har* c[]={"南校区正门","物理实验楼","南校区图书馆","大学生活动中心","教师办公楼、医务室及留学生公寓","大礼堂,用于举办各种文艺演出","南校区第4教学楼","实习基地,计算机房等","国际交流中心,教职工餐厅","南校区第3教学楼","南校区第2教学楼","南校区第1教学楼","北校区图书馆","北校区第3教学楼","北校区第4教学楼","北校区第2教学楼","北校区第1教学楼","北校区正门"};i nt d[]={8,6,4,4,1,0,0,1,3,4,6,8,4,3,2,3,5,8};i nt e[]={8,8,8,10,8,10,7,6,6,6,6,6,3,1,0,0,0,2};i nt i,j;v ertexNum=18;a rcNum=30;f or(i=0;i<vertexNum;i++){adjlist[i].vex=a[i];adjlist[i].vexname=b[i];adjlist[i].vexinf=c[i];adjlist[i].dir.ln=d[i];adjlist[i].dir.col=e[i];}f or (i=0; i<vertexNum; i++)//初始化邻接矩阵for (j=0; j<vertexNum; j++)arc[i][j]=arc[j][i]=s[(i*(i+1))/2+j]; //根据s[]的对称性,将一维数组中的数据赋给二维数组arc[][]}template<class T>void MGraph<T>::printvexname(){i nt i;f or(i=0;i<vertexNum;i++)cout<<adjlist[i].vex<<" "<<adjlist[i].vexname<<endl;;}template<class T>void MGraph<T>::printvexinf(int i){c out<<i<<" "<<adjlist[i].vexname<<":"<<adjlist[i].vexinf<<endl;}template<class T>void MGraph<T>::printdir(int i,int j){i nt dx,nb;//临时存放i与j之间的南北东西关系 j在i的哪边??d x=adjlist[j].dir.col-adjlist[i].dir.col;n b=adjlist[j].dir.ln-adjlist[i].dir.ln;i f(dx>0)//即j在i的东边cout<<"向东"<<dx*100<<"m,";e lsecout<<"向西"<<dx*(0-100)<<"m,";i f(nb>0)//即j在i的南边cout<<"向南"<<nb*100<<"m";e lsecout<<"向北"<<nb*(0-100)<<"m";}template<class T>void MGraph<T>::Root(int p,int q){i f (Path[p][q]>0){Root(p,Path[p][q]);Root(Path[p][q],q);}e lse{Line[kkk]=q;kkk++;}}template<class T>void MGraph<T>::printroad(int i,int j){i nt p,q,m,k,item1,item2;f or(p=0;p<vertexNum;p++)for(q=0;q<vertexNum;q++)Dist[p][q]=arc[p][q];//邻接矩阵赋值f or(k=0;k<vertexNum;k++)for(p=0;p<vertexNum;p++)if (Dist[p][k]>0)for(q=0;q<vertexNum;q++)if (Dist[k][q]>0)if (((Dist[p][q]>Dist[p][k]+Dist[k][q])||(Dist[p][q]==0))&&(p!=q)){Dist[p][q]=Dist[p][k]+Dist[k][q];Path[p][q]=k;}c out<<"\n=====================================================\n";c out<<"从"<<adjlist[i].vexname<<"到"<<adjlist[j].vexname<<"的最短路径为:"<<endl;c out<<adjlist[i].vexname;k kk=2;R oot(i,j);i tem2=Line[2];c out<<"-->";p rintdir(i,item2);c out<<"-->"<<adjlist[item2].vexname;f or(m=3;m<=kkk-1;m++){item1=Line[m];cout<<"-->";printdir(item1-1,item1);cout<<"-->"<<adjlist[item1].vexname;}c out<<endl;c out<<"\n=====================================================\n";}========================以下为main.cpp文件中主函数的实现========================== #include<iostream>#include"guide.cpp"using namespace std;int funcchoice()//系统功能选择页面{i nt choice;c out<<"=============================================================="<<endl;c out<<" 欢迎进入校园导游咨询平台"<<endl;c out<<" 1--显示校园所有景点信息"<<endl;c out<<" 2--查询校园景点信息"<<endl;c out<<" 3--问路查询系统"<<endl;c out<<" 4--退出导游资讯平台"<<endl;c out<<"=============================================================="<<endl;c out<<"请输入要选择的功能号:";c in>>choice;r eturn choice;}void main(){M Graph<char*> mg;i nt funcchoice();i nt fc;w hile(1){fc=funcchoice();if(fc==1){int i;for(i=0;i<mg.vertexNum;i++)mg.printvexinf(i);}else if(fc==2){int i;mg.printvexname();cout<<endl<<"请输入所要查询景点代号:";cin>>i;mg.printvexinf(i);}else if(fc==3){int i,j;mg.printvexname();cout<<"请输入两景点代号(我们将把最短路线反馈予您):";cin>>i>>j;mg.printroad(i,j);}else if(fc==4)break;elsecout<<"输入有误,请重新输入!"<<endl;}}if调试分析遇到的问题及解决的办法:在调试过程中,最常见到的问题有以下几种:1、忘记调用函数类模块template<class T>,有些类中或者函数中涉及函数类模块的调用,但忘记标注会导致编译错误。
校园导游图源代码
#include<stdio.h>#include<stdlib.h>#include<dos.h>#include<windows.h>#include<malloc.h>#define Max 100#define N 9//景点个数。
typedef int AdjMatrix[Max][Max];typedef struct{int vexs[Max];AdjMatrix arcs;}Matrix_Graph;//图的矩阵表示法。
void menu();//景点名、操作提示。
void creat(Matrix_Graph *G);//图的建立。
void path(Matrix_Graph G,int s,int e);//两景点之间最短的路径,s表示起始景点,e //最终到达景点。
#define Max 100#define N 9void menu(){printf("1---南大门\n");printf("2---老师办公室\n");printf("3---图书馆\n");printf("4---一号教学楼\n");printf("5---宿舍\n");printf("6---食堂\n");printf("7---北大门\n");printf("8---44号教学楼\n");printf("9---学校广场\n");printf("\n菜单:\n");printf("请选择位置对应数字项目:\n");printf("1----介绍\n");printf("2----路径\n");printf("0----退出\n");}void creat(Matrix_Graph *G){int i,j;for(i=1;i<=N;i++) G->vexs[i]=i;//初始化,0号位不用。
c++数据结构课程设计校园导游设计代码
C++数据结构课程设计——校园导游设计代码1. 引言在现代高校教育中,数据结构课程的重要性不言而喻。
而在C++语言中,有关数据结构的课程设计更是相当重要。
本文将探讨如何利用C++语言设计校园导游系统的代码,并给出详细的设计方案和代码实现。
2.设计思路校园导游系统主要包括地图信息的输入、导游路线的规划、用户信息的管理和景点信息的展示。
我们将采用图的数据结构和Dijkstra算法来实现导游路线的规划,采用链表和栈的数据结构来实现用户信息的管理,采用数组和哈希表的数据结构来实现景点信息的展示。
3.系统架构3.1 地图信息的输入为了实现地图信息的输入,我们将采用图的数据结构来描述校园内的各个景点之间的相互关系。
每个景点将作为图的一个节点,而景点之间的路径将作为图的一条边。
我们将设计一个函数来输入景点之间的相互关系,并将其存储在图的邻接矩阵中。
3.2 导游路线的规划为了实现导游路线的规划,我们将采用Dijkstra算法来求解最短路线。
我们将设计一个函数来实现Dijkstra算法,并根据用户的起始点和终点来输出最短路线。
3.3 用户信息的管理为了实现用户信息的管理,我们将采用链表和栈的数据结构来存储用户的历史操作信息。
我们将设计一个函数来实现用户信息的录入和查询,并将其存储在链表和栈中进行管理。
3.4 景点信息的展示为了实现景点信息的展示,我们将采用数组和哈希表的数据结构来存储校园内各个景点的相关信息。
我们将设计一个函数来实现各个景点信息的录入和展示,并将其存储在数组和哈希表中进行管理。
4. 代码实现以下是校园导游系统的C++代码实现:```// TO DO```5. 结语通过以上的设计方案和代码实现,我们成功利用C++语言设计了一个校园导游系统。
该系统能够实现地图信息的输入、导游路线的规划、用户信息的管理和景点信息的展示。
希望本文能够给读者在学习C++数据结构课程设计时提供一定的帮助。
除了以上提到的功能,校园导游系统还可以增加更多的特色功能,比如语音导览、虚拟现实导览、导游路线的可视化展示等。
(完整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.背景知识1.校园导游需求2.数据结构概述2.程序设计原理1.数据结构设计2.地点信息管理3.导航算法设计3.算法实现1.数据结构定义2.地点信息管理算法3.导航算法4.使用方法1.程序安装2.数据录入3.导游功能使用5.附录1.附件1:源码文件2.附件2:数据样例1.背景知识1.1 校园导游需求校园导游程序是为了帮助使用者在校园中快速找到目标地点,并提供导航功能,方便出行和参观。
该程序需要管理校园地点的信息,包括名称、位置和介绍等。
使用者可以通过程序查找地点、导航到目标地点。
1.2 数据结构概述数据结构是计算机中用来组织和存储数据的方式。
在校园导游程序中,我们需要选择适合的数据结构来存储和管理地点信息。
常用的数据结构有数组、链表、树、图等。
根据需求分析,我们可以使用图这一数据结构来表示校园地点之间的关系,方便进行导航。
2.程序设计原理2.1 数据结构设计在校园导游程序中,我们使用图这一数据结构来表示校园地点之间的关系。
每个地点可以看作图的一个节点,节点之间的边表示地点之间的连接关系。
通过构建图数据结构,我们可以方便地管理地点信息并进行导航。
2.2 地点信息管理地点信息管理是校园导游程序的核心功能之一。
我们需要设计适合的数据结构来存储地点的信息,包括名称、位置和介绍等。
通过合理的数据结构设计,可以快速地查找和修改地点信息。
2.3 导航算法设计导航算法是实现导游功能的关键。
我们需要设计算法来计算出从起点到目标地点的最短路径,并提供导航指引。
常用的导航算法有Dijkstra算法、A算法等,我们根据需求选择合适的算法进行实现。
3.算法实现3.1 数据结构定义我们使用图这一数据结构来表示校园地点之间的连接关系。
数据结构-导游系统
该程序共有5个函数。
分别是Introduce,shortestdistance,floyed,display 及main。
其功能分别是:Introduce:地点介绍函数。
Shortestdistance:计算两地的最短距离。
Floyed:floyed算法求两地的最短距离。
Display:打印两个地点的路径及最短距离至屏幕。
Main:总体控制各函数并提供原始数据。
简单的导游程序-----------------------------------------以下是程序源码-------------------------------------------#include<stdio.h>#include<process.h>/*定义符号常量*/#define INT_MAX 10000#define n 12/*---------------------------------------------------------------------*//*定义全局变量*/int cost[n][n];/* 边的值*/int shortest[n][n];/* 两点间的最短距离*/int path[n][n];/* 经过的地点*//*---------------------------------------------------------------------*//*自定义函数原型说明*/void introduce();int shortestdistance();void floyed();void display(int i,int j);/*---------------------------------------------------------------------*/void main(){/*主函数*/int i,j;char k;for(i=0;i<=n;i++)for(j=0;j<=n;j++)cost[i][j]=INT_MAX;cost[1][2]=cost[2][1]=339;cost[1][3]=cost[3][1]=28;cost[1][4]=cost[4][1]=69;cost[1][5]=cost[5][1]=127;cost[1][7]=cost[7][1]=342;cost[1][10]=cost[10][1]=107;cost[2][7]=cost[7][2]=283;cost[3][6]=cost[6][3]=165;cost[7][11]=cost[11][7]=218;cost[8][12]=cost[12][8]=313;cost[8][10]=cost[10][8]=90;cost[12][9]=cost[9][12]=211;cost[1][1]=cost[2][2]=cost[3][3]=cost[4][4]=cost[5][5]=0;cost[6][6]=cost[7][7]=cost[8][8]=cost[9][9]=cost[10][10]=0;while(1){clrscr();printf("-----------Welcome to the trunk highway system in Shaanxi Province!-----------\n");printf("1.Location Information\n");printf("2.The shortest path query\n");printf("0.exit\n");printf("locations:\n");printf("1:Xi'an");printf("2:AnKang");printf("3:XianYang");printf("4:WeiNan");printf("5:ShangLuo");printf("6:BaoJi\n");printf("7:HanZhong");printf("8:YanAn");printf("9:YuLin");printf("10:TongChuan");printf("11:GuangYuan");printf("12:SuiDe\n");printf("------------------------------------------------------------------------------\n");printf("Please select the services you need:");scanf("\n%c",&k);switch(k){case '1':printf("Into the place of information:\n");introduce();break;case '2':printf("Inquiries into the shortest path:");shortestdistance();break;case '0':exit(0);default:printf("Error!\nPlease input1,2or0.\n");break;}}}/*main*//*---------------------------------------------------------------------*/void introduce(){/*地点介绍*/int a;printf("Inquiries as to which site you would like moreinformation?\nPlease enter the location code:");scanf("%d",&a);printf("\n");switch(a){case 1:printf("1:Xi'an\n\n Shaanxi Province's political center.\n\n");break; case 2:printf("2:AnKang \n\n Is located in Xi'an, Wuhan, Chongqing Economic Area, the three geometric center.");break;case 3:printf("3:XianYang\n\n International Airport.\n\n");break;case 4:printf("4:WeiNan\n\n Is next to the Huashan.\n\n");break;case 5:printf("5:ShangLuo\n\n There are a result of mountain, named after Waterinfo.\n\n");break;case 6:printf("6:BaoJi\n\n Another Gu Cheng, China is the ancestor of Yan Emperor's hometown.\n\n");break;case 7:printf("7:HanZhong\n\n is a beautiful and richly endowed in the central Hanzhong Basi.n\n\n");break;case 8:printf("8:YanAn\n\n The old revolutionary base areas.\n\n");break; case 9:printf("9: YuLin\n\n Shaanxi Province is now the focus of development.\n\n"); break;case 10:printf("10: TongChuan\n\n Leading to the tomb and the humanities Chuzu revolutionary Yan'an of the Holy Land must pass through to.\n\n");break; case 11:printf("11:GuangYuan\n\n Earthquake hit\n\n\n");break;case 12:printf("12: SuiDe\n\n My hometown!\n\n");break;default:printf("Error!Please input1->10!\n\n"); break;}getch();}/*introduce*//*---------------------------------------------------------------------*/int shortestdistance(){/*要查找的两地点的最短距离*/int i,j;printf("Please input two location code (1->12 devided by ','):"); scanf("%d,%d",&i,&j);if(i>n||i<=0||j>n||j<0){printf("Error!\n\n");printf(" Please input two location code (1->12 devided by ','):\n"); scanf("%d,%d",&i,&j);}else{floyed();display(i,j);}return 1;}/*shortestdistance*//*---------------------------------------------------------------------*/void floyed(){/*用floyed算法求两个地点的最短路径*/int i,j,k;for(i=1;i<=n;i++)for(j=1;j<=n;j++){shortest[i][j]=cost[i][j];path[i][j]=0;}for(k=1;k<=n;k++)for(i=1;i<=n;i++)for(j=1;j<=n;j++)if(shortest[i][j]>(shortest[i][k]+shortest[k][j])){/*用path[][]记录从i到j的最短路径上点j的前驱地点的序号*/shortest[i][j]=shortest[i][k]+shortest[k][j];path[i][j]=k;path[j][i]=k;}}/*floyed*//*---------------------------------------------------------------------*/void display(int i,int j){/* 打印两个地点的路径及最短距离 */int a,b;a=i;b=j;printf("Which is theshortest path between two locations do you required:\n\n");if(shortest[i][j]!=INT_MAX){if(i<j){printf("%d",b);while(path[i][j]!=0){/* 把i到j的路径上所有经过的地点按逆序打印出来*/printf("<-%d",path[i][j]);if(i<j)j=path[i][j];elsei=path[j][i];}printf("<-%d",a);printf("\n\n");printf("(%d->%d)The shorest path is:%dkm\n\n",a,b,shortest[a][b]); }else{printf("%d",a);while(path[i][j]!=0){/* 把i到j的路径上所有经过的地点按顺序打印出来*/printf("->%d",path[i][j]);if(i<j)j=path[i][j];elsei=path[j][i];}printf("->%d",b);printf("\n\n");printf("(%d->%d)The shorest path is:%dkm\n\n",a,b,shortest[a][b]); }}elseprintf("Error!This path is not exsist!\n\n");printf("\n");getch();}/*display*/。
数据结构-校园导游系统
课程设计论文(附有代码!)题目:校园导游咨询学院:计算机科学与工程学院专业:计算机科学与技术姓名:学号:指导教师:2014年9月22日摘要桂林众山环绕,风景优美,加之近年来校园环境也得到不断地改善,来访校园的游客逐渐增加,为了方便众多游客对校园景点的参观,需要给来访人士提供校园导游咨询服务,利用计算机建立一个便利的咨询系统可以很好地解决这个问题。
在本设计实验中,我所采用的是邻接矩阵作为数据的存储结构,用不同的功能模块对两地距离和校园道路信息进行编辑。
当游客来访时,系统能根据用户输入的景点代号查询景点信息,提供任意两个景点间的最短路径查询,并能查询校园内的交通信息,方便游客访问。
工作人员还可以为校园更新景点以及路径信息。
本文将简单介绍该系统的开发背景,详细介绍系统的主要设计思路,函数的建立和使用过程,该系统功能的实现方式和实现结果,以及对所遇到问题的分析解决,最后对该系统进行总结描述。
关键词:校园导游咨询;C++;数据结构;最短路径;查询;目录引言 (1)1系统概述 (1)2需求分析 (1)2.1 系统需求 (1)2.2 开发环境 (2)3详细设计 (3)3.1 系统结构 (3)3.2 数据结构设计以及数据的初始化 (4)3.2.1 图结构设计 (4)3.2.2 数据的初始化 (4)3.3 查询模块的详细设计 (5)3.3.1 查询模块功能子函数设计 (5)3.4 更新功能模块详细设计 (7)3.4.1 更新模块功能子函数设计 (8)4所遇到的问题和分析解决 (10)5系统特色及关键 (11)6结论 (12)参考文献 (13)引言随着计算机科学技术的不断提高,计算机依靠其强大的功能已经成为人们生活中不可缺少的一部分,计算机能解决人类生活中的大部分问题,为人类文明和社会进步做出了巨大贡献。
桂林是一个全世界著名的旅游城市,近几年来旅游业得到了飞速的发展,来自各个国家各个城市的游客给城市带来了巨大的经济效益。
大数据结构课程设计报告材料(校园导游系统)附有源代码
课程论文(设计)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).综上所诉,用一个主函数把这些板块合成,生产一个菜单界面呈现在用户面前。
为此,可把系统分为以下几个核心:图的初始化、图的遍历、求最佳路线。
数据结构课程设计报告-校园导游程序
课程设计说明书课程名称数据结构课程设计设计课题校园导游程序专业计算机科学与技术班级学号姓名完成日期课程设计任务书设计题目:校园导游程序设计容与要求:[问题描述]用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。
要求能够回答有关景点介绍、游览路径等问题。
[基本要求](1)查询各景点的相关信息;(2)查询图中任意两个景点间的最短路径。
(3)查询图中任意两个景点间的所有路径。
(4)增加、删除、更新有关景点和道路的信息。
指导教师:2016年12月20日课程设计评语成绩:指导教师:_______________年月日目录一、问题描述1二、基本要求1三、测试数据2四、算法思想3五、模块划分45.1应用函数45.2.1主函数65.2.2查询景点信息函数75.2.3查询两景点之间最短路径函数85.2.4查询两景点之间所有路径函数85.2.6删除已有的顶点和路径95.2.7修改已有的顶点和路径11六、数据结构13七、测试14八、心得26九、源程序28一、问题描述用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。
要求能够回答有关景点介绍、游览路径等问题。
二、基本要求(1)查询各景点的相关信息;(2)查询图中任意两个景点间的最短路径。
(3)查询图中任意两个景点间的所有路径。
(4)增加、删除、更新有关景点和道路的信息。
三、测试数据菜单函数:依次输入:1,2,3,4,5,6,0分别对应景点信息查询,最短路径查询,所有路径查询,添加景点及路径信息,删除景点及路径信息,修改景点及路径信息,退出。
查询景点信息:输入:1,2分别对应按编号查询,按景点名称查询按编号查询:输入编号:1按景点名称查询:输入名称:大明桥最短路径查询:输入起始景点和终点景点编号:1,7所有路径查询:输入起始景点和终点景点编号:2,8添加景点及路径信息:输入新景点序号:9输入新景点名称:南门输入新景点相关信息:充满古韵的门,适合拍照输入到其余各景点的距离:50,100,20…删除景点及路径信息:输入:1,2分别对应按编号查询,按景点名称查询按编号查询:输入需要删除的景点编号:8修改景点及路径信息:输入:1,2分别对应修改景点信息,修改道路信息修改景点信息:输入1,2分别对应修改景点名称,修改景点描述修改景点信息:输入修改序号:1输入修改后的名称:图书馆123四、算法思想先利用CreateUDN 创建初始无向网,通过main主函数调用显示,操作功能的选择通过Menu函数输出,根据游客需求选择景点信息查询、景点之间最短路径查询、景点之间所有路径查询、添加景点信息、删除景点信息或者修改信息。
校园导游实验报告——数据结构(2023最新版)
校园导游实验报告——数据结构校园导游实验报告——数据结构⒈引言本实验旨在通过设计和实现一个校园导游系统,运用数据结构的相关知识,解决校园导游中的路径规划和信息查询等问题。
通过该实验,掌握数据结构在实际问题中的应用,并提高对数据结构的理解和运用能力。
⒉实验目的⑴理解和掌握树结构的概念和基本操作。
⑵掌握图的存储结构和常用算法。
⑶学习使用数据结构解决实际问题。
⑷提高编程能力和团队合作能力。
⒊实验任务⑴设计一个数据结构,用于表示校园地图的各个景点和路径关系。
⑵实现校园导游系统,包括路径规划和信息查询功能。
⑶对系统进行测试和性能优化。
⒋实验步骤⑴根据校园地图,设计合适的数据结构,包括景点、路径和导游系统等。
⒋⑴景点:定义景点的属性,包括名称、位置、介绍等。
⒋⑵路径:定义路径的属性,包括起始点、终点、距离等。
⒋⑶导游系统:定义导游系统的功能,包括路径规划和景点信息查询等。
⑵实现校园导游系统的核心功能。
⒋⑴路径规划:根据用户输入的起始点和终点,使用图的遍历算法,寻找最短路径。
⒋⑵景点信息查询:根据用户输入的景点名称,查询并展示景点的详细信息。
⑶对导游系统进行完整性测试和性能优化。
⒋⑴测试导游系统的各个功能模块,确保无误。
⒋⑵针对导游系统的性能瓶颈,进行分析和优化,提高系统响应速度和稳定性。
⒌实验结果与分析⑴校园导游系统实现了路径规划和景点信息查询的功能。
⑵经过完整性测试,系统的各个功能模块均正常运行,没有明显的错误。
⑶对导游系统的性能进行优化后,系统响应速度明显提升,用户体验更加良好。
⒍实验总结通过本次实验,我们深入理解了数据结构的应用,并成功设计和实现了一个校园导游系统。
在实验过程中,我们不仅提高了编程能力,还增强了团队合作意识。
通过测试和优化,我们不断完善系统,使其达到了预期目标。
附件:⒈校园地图⒉系统设计文档⒊测试报告法律名词及注释:⒈数据结构:指描述数据元素之间相关关系的一种方式,包括逻辑结构和物理结构。
C++数据结构课程设计-校园导游咨询系统
数据结构(C++)课程设计题目: 校园导游咨询*姓名:学号:院系:专业年级:2014年7月8日目录一、设计题目 (2)二、需求分析 (2)三、概要设计 (6)四、详细设计 (11)五、调试分析 (14)六、测试结果 (14)七、附录:程序设计源代码 (21)一、设计题目校园导游咨询*二、需求分析1)运行环境(软、硬件环境)电脑型号X64 兼容台式电脑处理器英特尔第二代酷睿***************四核主板华硕P8H61-M LX (英特尔H61 芯片组)内存8 GB ( 威刚DDR3 1333MHz )主硬盘西数WDC WD10EALX-009BA0 ( 1 TB / 7200 转/分)显卡ATI Radeon HD 6700 Series ( 512 MB / ATI )显示器SGW5600 PL2208HD ( 21.7 英寸)光驱华硕DRW-24D1ST a DVD刻录机声卡瑞昱ALC887 @ 英特尔 6 Series Chipset 高保真音频网卡瑞昱RTL8168E PCI-E Gigabit Ethernet NIC / 华硕操作系统:Windows 7 Ultimate (x86) sp1编程环境:Microsoft Visual Studio 20122)输入的形式和输入值的范围内容形式范围景点代号int 自然数景点名称string 所有字符景点简介string 所有字符X坐标int 正整数Y坐标int 正整数3)输出的形式描述内容形式范围景点代号int 自然数景点名称string 所有字符景点简介string 所有字符X坐标int 正整数Y坐标int 正整数最短路径图像jpg4)功能描述以我校南汇校区部分景点、进行抽象化,生成了具有15个顶点、18条边的图,以邻接表与邻接矩阵复合形式储存在内存中,主要有以下功能:a.查询景点的信息,包括基本信息和拓展的周围节点信息;b.景点导航,给出起点、终点,规划出最短路径和风景最佳路径;c.修改景点,道路信息,包括添加景点、添加道路、修改景点功能;d.开发人员工具,包括邻接表、邻接矩阵的查看DFS深度优先遍历、BFS广度优先遍历e.显示地图,打开预制的地图文件查看5)测试数据初始地图信息:景点景点名称景点介绍X坐标Y坐标编号0 北校门学校的北入口 2 141 北图书馆学校北侧图书馆12 142 崇德楼经管学院楼26 143 奋进楼公共机房12 2826 284 北运动场具有足球场、篮球场、健身房等12 325 行政楼计算机学院楼及其他行政办公12 396 教师活动中心又称H楼,具有桌球、乒乓球、会议室、舞厅等7 雕塑校园雕塑26 398 南校门学校南入口 2 509 至诚楼办理学生事务处12 5026 5010 大礼堂学校大型文艺演出、讲座场所11 南图书馆学校南侧的图书馆12 52团委、学生会、社联所在处12 1212 大学生文化活动中心13 风帆广场绿地广场,景色优美26 5812 7014 南运动场具有足球场、篮球场、羽毛球场等距离邻接矩阵:三、概要设计1)抽象数据类型定义描述(对各类的成员及成员函数进行抽象描述,参见书或ppt及实验)Site类Data:编号Code景点名称SiteName景点介绍Introduction景点X坐标景点Y坐标Operation:构造函数输入:编号,名称,介绍,X坐标,Y坐标前置条件:无动作:初始化Site类元素输出:无后置条件:无SetSite输入:编号,名称,介绍,X坐标,Y坐标前置条件:无动作:赋值Site类元素输出:无后置条件:无ArcNode类Data :邻接点下标值Adjvx指向下一个边结点的指针*nextarc;风景等级sceneLevel;距离distance;Operation:构造函数输入:Adjvx, *nextarc, sceneLevel;前置条件:无动作:初始化ArcNode类输出:无后置条件:无VertexNode类Data :节点内容vex节点首指针*firstarcOperation:无Road类Data :Site型节点1,节点2距离Distance风景等级Bool型是否是机动车道carAviliable;Operation:SetRoad构造函数输入:节点1,节点2,风景等级前置条件:存在Site对象动作:初始化Road类输出:无后置条件:无BGraph 类Data :邻接表adjlist[]Int 距离矩阵Int 风景值矩阵Operation:构造函数输入:前置条件:动作:输出:后置条件:无addSite函数输入:景点名称,景点信息,景点X坐标,景点Y坐标前置条件:顶点表已建立动作:添加邻接表顶点、修改邻接矩阵输出:无后置条件:无addRoad函数输入:景点1名称,景点2名称,风景等级前置条件:顶点表已建立动作:添加邻接表的边表,修改邻接矩阵输出:无后置条件:无ShowInfo函数输入:无前置条件:函数已初始化动作:输出当前图信息输出:顶点数、边数后置条件:无pGraph函数输入:无前置条件:函数已初始化动作:输出邻接表输出:邻接表后置条件:无pMatrix输入:无前置条件:函数已初始化动作:输出邻接矩阵输出:邻接矩阵后置条件:无searchByName输入:景点名称前置条件:图已初始化动作:搜索符合名称的节点输出:节点site型后置条件:无DFSTraverse函数输入:无前置条件:图已初始化动作:深度优先遍历输出:遍历路径后置条件:无BFSTraverse函数输入:无前置条件:图已初始化动作:广度优先遍历输出:遍历路径后置条件:无FindPath函数输入:节点1,节点2前置条件:图已初始化动作:计算最短路径输出:路径经过点、路径产长度、每一步的方向后置条件:无2)功能模块设计(如主程序模块设计)1.主程序模块:连接各种功能子模块,使用循环等待用户操作,完成程序的基本操作实现功能。
校园导游程序报告
实验四校园导游程序指导教师签名:__________ 成绩:__________一、问题描述问题描述:用无向图表示你所在学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等。
设计要求:1.查询各景点的相关信息;2.查询图中任意两个景点间的最短路径;3.查询图中任意两个景点间的所有路径二、算法说明1.数据结构说明typedef struct{int NO; //景点序号char name[10]; //景点名称char jianjie[M*2]; //景点介绍}Adjst; //景点信息结点typedef struct ArcNode{int NO; //景点序号float distance; //邻接景点间距离ArcNode *Nnext; //某景点的另一邻接景点}ArcNode; //景点邻接表typedef struct PreNode{int AimId; //目的地序号float Adistance; //总距离int *path; //路径int lenth ; //路径长度struct PreNode *next; //下一个路径}PathNode;typedef struct HeadLink{Adjst S; //景点全部信息ArcNode *Nnext; //该景点邻接景点PathNode *PathColl; //该景点到其余景点的路径集合}HeadLink; //景点头表typedef struct TU{int Num; //景点个数HeadLink *scenicSpot; //景点头表}TU; //景区2.算法说明这个程序是实现图的最短路径而设计的;其中涉及到图的创建、图的查询、以及各种算法!首先该程序是利用链表的结构来创建图的,用的是邻接链表来实现图的各个结点来联系。
在功能菜单中运用for循环来实现各个功能的选择!1:图的创建邻接表的创建是利用链表的尾插法来将各个结点的邻接结点插入;用for循环来实现将各个顶点按照编号实现信息的创建!同时利用循环将各个路径数组和结点结点遍历的标志初始化!利用while循环输出所有景点信息!2:所有路径查询输入两景点的序号,利用深度优先遍历将所有可能的情况保存;将通过的路径存在路径数组中在setpath()函数中实现,在利用标志来判断景点是否遍历过,进行深度优先遍历;利用递归将所有可能的情况列出,其中将遍历的所有结果记录在数组中;输出所有结果。
数据结构课程设计报告(校园导游系统)附有源代码(20191123003227)
图 4.3.1 景点 2 红满堂信息查询
图 4.3.2 景点 7 竹园信息查询 4.4 任意两个景点间地最短路径
根据用户地需求 , 在用户输入了起点和终点后计算出最短路径是哪一条路径 . 以下举两个例子 . 第一个例子地起点是 5 东区运动场 , 终点是 1 校史馆 . 第二个例 子地起点是 2 红满堂 , 终点是 10 黑山运动场 . 运行结果如图 4.4.1 和图 4.4.2 所 示 . 83lcPA59W9
图 4.1 校园导游节目图 4.2 华农校园地图
校园地图地查看是通过抽象化 10 个景点来用 printf( > 输入选择 1 之后弹出地界面 , 运行结果如图 4.2. HbmVN777sL
函数输出地图 , 在
图 4.2 抽象化地华南农业大学校园导游地图 4.3 景点地相关信息查询
景点地相关信息查询是通过 information( > 函数来调用输出地 , 在主菜单 那输入 2 之后 , 拿第 2 个景点红满堂和第 7 个景点竹园来当例子 , 第运行结果如 图 4.3.1 和图 4.3.2. V7l4jRB8Hs
2.2 输出 dist[j] 和 path[j] ;
2.3 修改数组 dist 和 path 。
2.4 将顶点 vk 添加到数组 s 中;
3. 系统流程
3.1 系统地简单说明 1. 创建校园图: <1)先手工画好华农地 10 个景点地草图 , 再用 C++语言输出抽象化地校园
地图 . <2)再用 C++语言定义节点个数 N,编写函数 name( >为景点赋值各类信息
为空串 . 1nowfTG4KI
数组 s[n] :存放源点和已经生成地终点 <即集合 S), 初态为只有一个源点 v.
校园导游系统代码
printf("请输入一个起始景点编号:");
scanf("%d",&v0);
if(v0<0||v0>G->vexnum)
{
printf("景点编号不存在!请重新输入景点编号:");
scanf("%d",&v0);
}
if(v0>=0&&v0<G->vexnum)
void cmd(void);
MGraph InitGraph(void);
void Menu(void);
void Browser(MGraph *G);
void ShortestPath_DIJ(MGraph * G);
void Floyd(MGraph *G);
void Search(MGraph *G);
for(v=0;v<G->vexnum;v++)
printf("┃%-4d┃%-16s┃%-56s┃\n",G->vexs[v].num,G->vexs[v].name,G->vexs[v].introduction);
printf("┗━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
G.arcs[1][7].adj=300;
G.arcs[2][3].adj=120;
G.arcs[3][6].adj=220;
G.arcs[3][4].adj=100;
G.arcs[4][5].adj=300;
校园导航系统源代码
数据结构-校园导航系统简介:本系统采用C语言编写,运行环境为Dev-C++;内容以西安电子科技大学南校区为例;主要功能有:1.查询景点信息;2.查询两景点间最短距离;3.查询两景点间所有路线;4.查询西电校园地图;5.修改景点和路径信息.注意事项:在进行修改景点和路径信息操作前,请在可执行文件目录下用记事本创建”super User.CODE”文件来存放用户名与密码(中间以空格隔开),否则无法进入.源代码:#include <string.h>#include <stdio.h>#include <conio.h>#include <stdlib.h>#include <ctype.h>#define Max 20000typedef struct ArcCell{int adj; //两个景点间的距离}ArcCell;typedef struct VertexType{int number; //景点编号char sight[100]; //景点名称char description[1000]; //景点简介char particular1[1000];char particular2[1000];char particular3[1000]; //景点详情}VertexType;typedef struct{VertexType vex[20]; //最多存放20个景点信息ArcCell arcs[20][20]; //两个景点间的距离int vexnum,arcnum;}MGraph;MGraph G;char nameofschool[100]; //学校名称int NUM=9;int P[20][20];int p[20];int visited[20];int a=0;long int D[20];int x[20]={0};//函数声明void CreateUDN(int v,int a);void narrate();void ShortestPath(int num);void output(int sight1,int sight2);char Menu();void search();char SearchMenu();void HaMiTonian(int);void Searchpath1(MGraph g);void disppath(MGraph g,int i,int j);void path(MGraph g,int i,int j,int k);void NextValue(int);void display();int Addnewsight(int n);int Deletesight(int n);void Changesight();char Changemenu();char Sightmenu();int Maintain(void);int VerificatianIdentity(void);void map();//主函数int main(){int v0,v1;int MaintainFlag;char ck;system("color 0F");CreateUDN(NUM,11);do{ck=Menu();switch(ck){case '1':search();break;case '2':system("cls");narrate();printf("\n\n\t\t\t请选择起点景点(0~%d):",NUM-1);scanf("%d",&v0);printf("\t\t\t请选择终点景点(0~%d):",NUM-1);scanf("%d",&v1);ShortestPath(v0);output(v0,v1);printf("\n\n\t\t\t\t请按任意键继续...\n");getchar();getchar();break;case'3':system("cls");narrate();x[0]=1;Searchpath1(G);printf("\n\n\t\t\t\t请按任意键继续...\n");getchar();getchar();break;case'4':system("cls");map();printf("\n\n\t\t\t\t\t请按任意键继续...\n");getchar();getchar();break;case'5':system("cls");narrate();MaintainFlag = Maintain();switch(MaintainFlag){case'1':system("cls");narrate();NUM=Addnewsight(NUM);system("cls");narrate();break;case'2':NUM=Deletesight(NUM);break;case'3':Changesight();break;}break;};}while(ck!='e');return 0;}//主菜单char Menu(){char c;int flag;do{flag=1;system("cls");narrate();printf("\n\t\t\t┏━━━━━━━━━━━━━━━┑\n");printf("\t\t\t┃ ┃\n");printf("\t\t\t┃ 1、查询景点信息┃\n");printf("\t\t\t┃ 2、查询两景点间最短路径┃\n");printf("\t\t\t┃ 3、查询两景点间所有路线┃\n");printf("\t\t\t┃ 4、查看西电校园地图┃\n");printf("\t\t\t┃ 5、修改景点和路径信息┃\n");printf("\t\t\t┃ e、退出┃\n");printf("\t\t\t┃ ┃\n");printf("\t\t\t┗━━━━━━━━━━━━━━━┛\n");printf("\t\t\t\t请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='e')flag=0;}while(flag);return c;}//查询菜单char SearchMenu(){char c;int flag;do{flag=1;system("cls");narrate();printf("\n\t\t\t┏━━━━━━━━━━━━━━━┑\n");printf("\t\t\t┃ ┃\n");printf("\t\t\t┃ 1、按照景点编号查询┃\n");printf("\t\t\t┃ 2、按照景点名称查询┃\n");printf("\t\t\t┃ e、返回┃\n");printf("\t\t\t┃ ┃\n");printf("\t\t\t┗━━━━━━━━━━━━━━━┛\n");printf("\t\t\t\t请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='e')flag=0;}while(flag);return c;}//查询信息void search(){int num;int i;char c;char name[20];do{system("cls");c=SearchMenu();switch (c){case '1':system("cls");narrate();printf("\n\n\t\t请输入您要查找的景点编号:");scanf("%d",&num);for(i=0;i<NUM;i++){if(num==G.vex[i].number){printf("\n\t\t您要查找景点信息如下:");printf("\n\t\t(%d)%-5s:%-25s\n\n",i,G.vex[i].sight,G.vex[i].description);printf("\t\t\t\t\t详情介绍:\n\t\t%-s\n",G.vex[i].particular1);printf("\t\t%-s\n",G.vex[i].particular2);printf("\t\t%-s\n",G.vex[i].particular3);printf("\n\t\t按任意键返回...");getchar();getchar();break;}}if(i==NUM){printf("\n\n\t\t\t没有找到!");printf("\n\n\t\t\t按任意键返回...");getchar();getchar();}break;case '2':system("cls");narrate();printf("\n\n\t\t请输入您要查找的景点名称:");scanf("%s",name);for(i=0;i<NUM;i++){if(!strcmp(name,G.vex[i].sight)){printf("\n\t\t您要查找景点信息如下:");printf("\n\t\t(%d)%-5s:%-25s\n\n",i,G.vex[i].sight,G.vex[i].description);printf("\t\t\t\t\t详情介绍:\n\t\t%-s\n",G.vex[i].particular1);printf("\t\t%-s\n",G.vex[i].particular2);printf("\t\t%-s\n",G.vex[i].particular3);printf("\n\t\t按任意键返回...");getchar();getchar();break;}}if(i==NUM){printf("\n\n\t\t\t没有找到!");printf("\n\n\t\t\t按任意键返回...");getchar();getchar();}break;}}while(c!='e');}//构造图形void CreateUDN(int v,int a) {int i,j;strcpy(nameofschool,"西安电子科技大学");G.vexnum=v;G.arcnum=a;for(i=0;i<20;++i) G.vex[i].number=i;strcpy(G.vex[0].sight,"东门");strcpy(G.vex[0].description,"学校正门,可乘坐公交车,出租车等交通工具. ");strcpy(G.vex[0].particular1," 作为学校的正门,门外的交通系统非常发达,常年有出租车"); strcpy(G.vex[0].particular2,"经过,还有916路,173路等众多公交车线路在此设立站牌,所以"); strcpy(G.vex[0].particular3,"完全没必要担心坐不到车,出行非常方便!");strcpy(G.vex[1].sight,"图书馆");strcpy(G.vex[1].description,"馆藏文纸质献约270万余册,种类丰富,环境优美. ");strcpy(G.vex[1].particular1," 南校区图书馆2005年7月1日奠基,主要服务于新校区2万余"); strcpy(G.vex[1].particular2,"名本科生.地上建筑面积4万平方米,总框架五层,地下一层,地面"); strcpy(G.vex[1].particular3,"四层.拥有先进的设施、优雅温馨的阅读环境.");strcpy(G.vex[2].sight,"北门");strcpy(G.vex[2].description,"西电南校区的另外一个出入口,备有一个停车场. ");strcpy(G.vex[2].particular1," 北门日常的人流量不亚于东门,在这里有一个停车场,而且"); strcpy(G.vex[2].particular2,"这里还是西电的快递接收点,可以供广大师生在此寄取快递,非"); strcpy(G.vex[2].particular3,"常方便.而且临近综合楼,较为繁华.");strcpy(G.vex[3].sight,"海棠区");strcpy(G.vex[3].description,"2017级大一萌新即将入住的宿舍区. >o< ");strcpy(G.vex[3].particular1," 海棠宿舍位于学校西北面,所以距离北操,新综,北门较近,"); strcpy(G.vex[3].particular2,"准大一的学弟学妹们将会主要居住在5.6号楼(还有一部分会在"); strcpy(G.vex[3].particular3,"9.10号楼).海棠宿舍为两室一厅,每室各四人.");strcpy(G.vex[4].sight,"大活");strcpy(G.vex[4].description,"大学生活动中心的简称,小剧场就在这里. ");strcpy(G.vex[4].particular1," 大活建设在学校人工湖旁边,里面有实验室、舞蹈室等专用"); strcpy(G.vex[4].particular2,"教室,也是学校举办室内大型活动的常用地点,曾经陈一冰,周鸿"); strcpy(G.vex[4].particular3,"祎,黄晓明等人在此与同学们见面.");strcpy(G.vex[5].sight,"北操");strcpy(G.vex[5].description,"跑步踢球狼人杀...等等有趣的活动,超热闹. ");strcpy(G.vex[5].particular1," 北操基础设施齐全,有足球场跑道观众台羽毛球场等,是"); strcpy(G.vex[5].particular2,"学校举行大型体育赛事的场地,例如:运动会足球赛等.每天晚上"); strcpy(G.vex[5].particular3,"也会有许多同学在此运动玩耍,非常有趣.");strcpy(G.vex[6].sight,"观光塔");strcpy(G.vex[6].description,"南校区最显眼的建筑物,可以俯视整个校园. ");strcpy(G.vex[6].particular1," 观光塔是西电南校区最负盛名的建筑物,位处南校区最为中"); strcpy(G.vex[6].particular2,"间的位置,走在校园里,总是能够看到观光塔,到了晚上塔上的时"); strcpy(G.vex[6].particular3,"钟会亮起,很远都能看到,在月光下特别的漂亮.");strcpy(G.vex[7].sight,"体育馆");strcpy(G.vex[7].description,"今年刚刚建成,外观融合了\"天圆地方\"的思想. ");strcpy(G.vex[7].particular1," 考虑到学校的所在地西安是十三朝古都,亦应融入中国传统"); strcpy(G.vex[7].particular2,"文化的理念,以及体育馆主馆和训练馆的功能需求,最终决定以中"); strcpy(G.vex[7].particular3,"国传统文化的\"天圆地方\"为设计思路.美观大气.");strcpy(G.vex[8].sight,"行政楼");strcpy(G.vex[8].description,"可以进行盖章,补办一卡通等众多操作. ");strcpy(G.vex[8].particular1," 从东门进入学校,左手边的那栋楼就是行政楼,往后稍小一点"); strcpy(G.vex[8].particular2,"的就是行政辅楼.教务处、学工处、电院办公室在行政楼,一卡通"); strcpy(G.vex[8].particular3,"中心、户籍管理、财务处、一些学院的办公室在行政辅楼.");for(i=0;i<20;++i)for(j=0;j<20;++j)G.arcs[i][j].adj=Max;G.arcs[0][8].adj=G.arcs[8][0].adj=150;G.arcs[0][1].adj=G.arcs[1][0].adj=600;G.arcs[1][7].adj=G.arcs[7][1].adj=800;G.arcs[1][6].adj=G.arcs[6][1].adj=50;G.arcs[1][4].adj=G.arcs[4][1].adj=600;G.arcs[3][2].adj=G.arcs[2][3].adj=300;G.arcs[6][2].adj=G.arcs[2][6].adj=350;G.arcs[3][5].adj=G.arcs[5][3].adj=300;G.arcs[4][5].adj=G.arcs[5][4].adj=400;G.arcs[8][7].adj=G.arcs[7][8].adj=250;}//导图模块void narrate(){int i,k=0;printf("\n\t******************欢迎使用%s校园导游程序*****************\n\n",nameofschool);printf("\t━━━━━━━━━━|━━━━━━━━━━━━━━━━━━━━━━━━\n");printf("\t* 景点名称|\t\t\t景点描述\t\t *\n");printf("\t━━━━━━━━━━|━━━━━━━━━━━━━━━━━━━━━━━━\n");for(i=0;i<NUM;i++){printf("\t* (%d)%-15s|\t%-43s *\n",i,G.vex[i].sight,G.vex[i].description);k=k+1;}printf("\t━━━━━━━━━━|━━━━━━━━━━━━━━━━━━━━━━━━\n"); }//迪杰斯特拉算法void ShortestPath(int num){int v,w,i,t;int final[20];int min;for(v=0;v<NUM;v++){final[v]=0;D[v]=G.arcs[num][v].adj;for(w=0;w<NUM;w++)P[v][w]=0;if(D[v]<20000){P[v][num]=1;P[v][v]=1;}}D[num]=0;final[num]=1;for(i=0;i<NUM;++i){min=Max;for(w=0;w<NUM;++w)if(!final[w])if(D[w]<min){v=w;min=D[w];}final[v]=1;for(w=0;w<NUM;++w)if(!final[w]&&((min+G.arcs[v][w].adj)<D[w])){D[w]=min+G.arcs[v][w].adj;for(t=0;t<NUM;t++)P[w][t]=P[v][t];P[w][w]=1;}}}//输出函数void output(int sight1,int sight2){int a,b,c,d,q=0;a=sight2;if(a!=sight1){printf("\n\t\t从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("(最短距离为%dm.)\n\n\t",D[a]);printf("\t\t%s",G.vex[sight1].sight);d=sight1;for(c=0;c<NUM;++c){gate:;P[a][sight1]=0;for(b=0;b<NUM;b++){if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0) printf("\n");goto gate;}}。
校园导游实验报告——数据结构
校园导游实验报告——数据结构
校园导游实验报告——数据结构
1.引言
- 简要介绍实验的目的和背景
- 阐述校园导游系统的重要性和应用价值
2.需求分析
- 分析校园导游系统的功能需求和性能要求
- 确定系统的基本模块,如地图显示、导航功能等
3.系统设计
3.1 数据结构设计
- 介绍选择的数据结构,如图、树、队列等的原因和优劣势
- 描述数据结构的组织方式和关键操作
3.2 界面设计
- 展示校园导游系统的用户界面设计
- 解释界面设计的考虑因素,如易用性、用户体验等
4.算法设计与实现
4.1 寻路算法设计
- 探讨常见的寻路算法,如Dijkstra算法、A算法等 - 选择适合校园导游系统的寻路算法,并解释原因
4.2 数据存储与交互
- 描述数据的存储方式,如数据库、文件等
- 分析数据的交互方式,如文件读写、网络传输等5.实验结果与分析
- 展示校园导游系统的功能演示和性能测试结果
- 对实验结果进行详细分析和解释
6.总结与展望
- 总结实验的目标是否达到,解决了哪些问题
- 展望校园导游系统的未来发展方向和改进空间
附件:
附件1:校园导游系统源代码
附件2:校园地图数据文件
附件3:实验中使用的测试数据集
法律名词及注释:
1.版权:指对作品享有的法律保护,包括复制权、发行权等。
2.私下使用:指在非商业、非公开场合下个人使用作品。
3.公共领域:指没有版权保护的作品,可供任何人使用。
4.许可证:指被授权人可以在指定条件下使用作品的文件或证明。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实习报告实验名称:校园导游程序日期:2017年7月7日姓名:李琛学号:20153204 班级:信1501-2 指导教师:陈娜1.实验题目校园导游程序[问题描述] 用无向网表示学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。
要求能够回答有关景点介绍、游览路径等问题。
2.需求分析游客通过终端可询问:(1)从某一景点到另一景点的最短路径。
(2)游客从公园进入,选取一条最佳路线。
(3)使游客可以不重复地浏览各景点,最后回到出口(出口就在入口旁边)。
[基本要求](1)将导游图看作一张带权无向图,顶点表示公园的各个景点,边表示各景点之间的道路,边上的权值表示距离.为此图选择适当的数据结构。
页脚内容1(2)把各种路径都显示给游客,由游客自己选择浏览路线。
(3)画出景点分布图于屏幕上。
3.概要设计数据类型定义#include<iostream>#include<string>//图的邻接矩阵存储表示#define MaxInt 32767 //极大值#define MVNum 100 //最大顶点数//顶点类型为字符型typedef int ArcType; //边的权值为整型using namespace std;int i, j;int S[100], D[100], min, Path[100];int N = 49;int bestcost = MaxInt; //记录目前最少运费或代价int currentcost; //当前运费或代价页脚内容2int current[MaxInt]; //当前路径int best[MaxInt]; //记录最佳路径struct AMGraphd{string vexs[MVNum]; //顶点表int arcs[MVNum][MVNum]; //邻接矩阵int vexnum; //图的当前点数int arcnum; //边数string info[MVNum]; //景点介绍}G;主函数调用其它函数4.详细设计页脚内容3#include<iostream>#include<string>//图的邻接矩阵存储表示#define MaxInt 32767 //极大值#define MVNum 100 //最大顶点数//顶点类型为字符型typedef int ArcType; //边的权值为整型using namespace std;int i, j;int S[100], D[100], min, Path[100];int N = 49;int bestcost = MaxInt; //记录目前最少运费或代价int currentcost; //当前运费或代价int current[MaxInt]; //当前路径int best[MaxInt]; //记录最佳路径struct AMGraphd{页脚内容4string vexs[MVNum]; //顶点表int arcs[MVNum][MVNum]; //邻接矩阵int vexnum; //图的当前点数int arcnum; //边数string info[MVNum]; //景点介绍}G;//-------------------------------------------------void swap(int& a, int& b){int temp = a;a = b;b = temp;}void backtrack(int t)//其实就是一个排列问题。
{int j;页脚内容5if (t == N)//到了最后一层。
{if (G.arcs[current[t - 1]][current[t]] + G.arcs[current[t]][1] + currentcost<bestcost){bestcost = G.arcs[current[t - 1]][current[t]] + G.arcs[current[t]][1] + currentcost;for (j = 1; j <= N; j++){best[j] = current[j];}}}for (j = t; j <= N; j++)//排列。
{swap(current[t], current[j]);if (G.arcs[current[t - 1]][current[t]] + currentcost<bestcost)//其实currentcost就是包括了1-->(t-1)的代价或运费页脚内容6{currentcost += G.arcs[current[t - 1]][current[t]];backtrack(t + 1);//递归回溯currentcost -= G.arcs[current[t - 1]][current[t]];}swap(current[t], current[j]);}}//-------------------------------------------void all(){int i;for (i = 1; i <= N; i++){current[i] = i;}页脚内容7backtrack(2);//树的第一层已经找到了,所以从第二层开始cout <<"最少的运费为:"<< bestcost << endl;cout <<"最佳路径为: ";for (i = 1; i <= N; i++){cout << best[i] <<"->";}cout << best[1] << endl;}//-------------------------------------------//顶点定位int LocateVex(AMGraphd G, string u){int i = 0;while (G.vexs[i] !=u) i++;return i;}页脚内容8int CreateUD(AMGraphd&G){G.vexs[0] ="正门"; [0] ="学校正门";G.vexs[1] ="二教"; [1] ="学校的第二教学楼";G.vexs[2] ="一教"; [2] ="学校的第一教学楼";G.vexs[3] ="四教"; [3] ="学校的第四教学楼,苏式建筑";G.vexs[4] ="校医院"; [4] ="学生就医的地方,现已搬迁";G.vexs[5] ="春晖楼"; [5] ="学校办公场所";G.vexs[6] ="三教"; [6] ="第三教学楼,阶梯教室";G.vexs[7] ="沁园"; [7] ="有喷泉、小广场和一个世纪钟";G.vexs[8] ="翠园"; [8] ="与沁园相望,有比较多的植物";G.vexs[9] ="大礼堂"; [9] ="学校大礼堂,晚会、话剧等节目的表演场所";G.vexs[10] ="泽园"; [10] ="学校一景,有个凉亭";G.vexs[11] ="综餐"; [11] ="综合餐厅,有两层,消费水平较高";G.vexs[12] ="体育馆"; [12] ="室内运动场所";G.vexs[13] ="图书馆"; [13] ="学校图书馆,有五层书库,自习室,电子阅览室等";页脚内容9G.vexs[14] ="信息楼"; [14] ="信息科学与技术学院,学院楼不大";G.vexs[15] ="五教"; [15] ="第五教学楼,苏式建筑";G.vexs[16] ="基教"; [16] ="新建的基础教学楼,18层和地下两层,环境比较好";G.vexs[17] ="4/5/7/8栋"; [17] ="学生宿舍";G.vexs[18] ="学二"; [18] ="学二餐厅,上下两层";G.vexs[19] ="游泳馆"; [19] ="学校游泳馆,收费的";G.vexs[20] ="三实验楼"; [20] ="第三实验楼";G.vexs[21] ="超市"; [21] ="学校超市,银行都在这";G.vexs[22] ="九栋"; [22] ="最大的学生宿舍楼";G.vexs[23] ="学一"; [23] ="学一餐厅,地上两层,地下一层,共三层";G.vexs[24] ="西操"; [24] ="学校西边的操场,塑胶操场,比较大";G.vexs[25] ="机械楼"; [25] ="机械学院的楼";G.vexs[26] ="九实验楼"; [26] ="第九实验楼,主要是计算机上机";G.vexs[27] ="交通楼"; [27] ="交通学院的楼";G.vexs[28] ="1栋"; [28] ="学生第一宿舍楼";G.vexs[29] ="10/11栋"; [29] ="学生宿舍";G.vexs[30] ="土木楼"; [30] ="土木学院的楼";页脚内容10G.vexs[31] ="招待所"; [30] ="铁道大学的招待所";G.vexnum = 32;G.arcnum = 49;for (i = 0; i < G.vexnum; ++i) //权值初始化为最大值for (j = 0; j < G.arcnum; ++j){G.arcs[i][j] = MaxInt;}G.arcs[0][2] =1 ; G.arcs[1][2] =2 ; G.arcs[1][6] = 1; G.arcs[2][7] =1 ; G.arcs[2][3] =2 ; G.arcs[3][8] = 1;G.arcs[3][4] =1 ; G.arcs[4][9] =1 ; G.arcs[4][5] = 3; G.arcs[5][10] = 1;G.arcs[2][0] = 1; G.arcs[2][1] = 2; G.arcs[6][1] = 1; G.arcs[7][2] = 1; G.arcs[3][2] = 2; G.arcs[8][3] = 1;G.arcs[4][3] = 1; G.arcs[9][4] = 1; G.arcs[5][4] = 3; G.arcs[10][5] = 1;G.arcs[6][7] =2 ; G.arcs[6][12] = 1; G.arcs[7][13] =1 ; G.arcs[7][8] =2 ; G.arcs[8][15] =1 ; G.arcs[8][9] =1 ; G.arcs[9][16] = 1; G.arcs[9][10] = 3; G.arcs[10][17] =1 ; G.arcs[10][11] = 2;G.arcs[7][6] = 2; G.arcs[12][6] = 1; G.arcs[13][7] = 1; G.arcs[8][7] = 2; G.arcs[15][8] = 1; G.arcs[9][8] = 1; G.arcs[16][9] = 1; G.arcs[10][9] = 3; G.arcs[17][10] = 1; G.arcs[11][10] = 2;G.arcs[11][18] = 2; G.arcs[12][13] = 2; G.arcs[12][19] = 1; G.arcs[13][20] = 1; G.arcs[13][14] = 1; G.arcs[14][15]页脚内容11= 1; G.arcs[15][27] = 2; G.arcs[15][16] = 1; G.arcs[16][21] = 1; G.arcs[16][17] = 1;G.arcs[18][11] = 2; G.arcs[13][12] = 2; G.arcs[19][12] = 1; G.arcs[20][13] = 1; G.arcs[14][13] = 1; G.arcs[15][14] = 1; G.arcs[27][15] = 2; G.arcs[16][15] = 1; G.arcs[21][16] = 1; G.arcs[17][16] = 1;G.arcs[17][22] =1 ; G.arcs[17][18] = 1; G.arcs[18][23] = 1; G.arcs[19][20] = 2; G.arcs[19][25] =1 ;G.arcs[20][26] = 1; G.arcs[21][28] = 1; G.arcs[21][22] = 2; G.arcs[22][29] = 1; G.arcs[22][23] = 2;G.arcs[22][17] = 1; G.arcs[18][17] = 1; G.arcs[23][18] = 1; G.arcs[20][19] = 2; G.arcs[25][19] = 1;G.arcs[26][20] = 1; G.arcs[28][21] = 1; G.arcs[22][21] = 2; G.arcs[29][22] = 1; G.arcs[23][22] = 2;G.arcs[24][25] = 1; G.arcs[25][26] = 2; G.arcs[26][30] = 1; G.arcs[26][27] =2 ; G.arcs[27][28] = 1;G.arcs[28][29] = 2; G.arcs[24][30] = 5; G.arcs[0][31] = 2; G.arcs[4][31] = 3;G.arcs[25][24] = 1; G.arcs[26][25] = 2; G.arcs[30][26] = 1; G.arcs[27][26] = 2; G.arcs[28][27] = 1;G.arcs[29][28] = 2; G.arcs[30][24] = 5; G.arcs[31][0] = 2; G.arcs[31][4] = 3;return 0;}void find(){int ff;string ss;cout <<"请输入景点"<< endl;cin >> ss;页脚内容12ff= LocateVex(G, ss);//起点cout << ss <<"的简介为:"<< endl;cout << [ff] << endl;cout << endl;}void show(){cout <<" -------------------------土木楼"<< endl;cout <<" | | "<< endl;cout <<"西操-------机械楼------- 九实验楼------------------交通楼------ 1栋----------- 10/11栋"<< endl;cout <<" | | | | |"<< endl;cout <<" 游泳馆------- 三实验楼| 超市------------ 九栋---------- 学一"<< endl;cout <<" | | | | || "<< endl;cout <<" 体育馆------- 图书馆------ 信息楼------ 五教------ 基教---------- 4/5/7/8栋------- 学二"<< endl;页脚内容13cout <<" | | | | || "<< endl;cout <<" 三教---------- 沁园--------------------- 翠园------ 大礼堂---------- 泽园---------- 综餐"<< endl;cout <<" | | | | |"<< endl;cout <<" 二教---------- 一教--------------------- 四教------ 校医院---------- 春晖楼"<< endl;cout <<" | | "<< endl;cout <<" 正门--------------------------------- 招待所"<< endl;}void xuanze(){string a;string b;cout <<"请输入当前位置:";cin >> a;cout <<"请输入终点位置:";页脚内容14cin >> b;int i, n, v, v0, w, z;v0 = LocateVex(G, a);//起点z = LocateVex(G, b);//终点n = G.vexnum;for (v = 0; v < n; v++){S[v] = false;D[v] = G.arcs[v0][v];if (D[v] < MaxInt)Path[v] = v0;elsePath[v] = -1;}S[v0] = true;D[v0] = 0;页脚内容15for (i = 1; i < n; i++){min = MaxInt;for (w = 0; w < n; w++){if (!S[w] && D[w] < min){v = w;min = D[w];}}S[v] = true;for (w = 0; w < n; w++){if (!S[w] && (D[v] + G.arcs[v][w] < D[w])){D[w] = D[v] + G.arcs[v][w];页脚内容16Path[w] = v;}}}cout << endl;cout <<"路线为:"<< endl;int s = z;cout << G.vexs[z] <<" <-- ";while (Path[s]!= v0){cout << G.vexs[Path[s]] <<" <-- ";s = Path[s];}cout << G.vexs[v0];cout << endl;cout <<"最短距离为:"<< D[z] *100<<"m"<< endl; cout << endl;页脚内容17}void main(){CreateUD(G);int q=1;while (q != 0){cout << endl;cout <<" |------------ 校园导航-------------|"<< endl;cout <<" |-----------------1、显示地图------------------|"<< endl;cout <<" |-----------------2、导航----------------------|"<< endl;cout <<" |-----------------3、遍历校园------------------|"<< endl;cout <<" |-----------------4、景点查询------------------|"<< endl;cout <<" |-----------------0、退出----------------------|"<< endl;cout <<"请输入:";cin >> q;页脚内容18cout << endl;switch (q){case 1:show(); break;case 2:xuanze(); break;case 3:all(); break;case 4:find(); break;}}}5.调试分析这个代码是使用的之前的迪杰斯特克算法,就是在输出路径这里不知道该如何写,经过了几天的调试写出的。