数据结构课程设计报告,校园导游图

合集下载

数据结构实践课程报告

数据结构实践课程报告

算法设计实践课程报告学院:计算机学院班级:学号:姓名:一、课程目的本课程设计为培养学生综合实践的能力,理论知识和实际有机的结合起来,锻炼学生实际分析问题和解决问题的能力,提高学生适应实际、实践编程的能力,使对C++系统编程有一个深入的了解。

二、题目3. 校园导游程序——最短路径应用问题描述:用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。

要求能够回答有关景点介绍、游览路径等问题。

基本要求:实现一简单的功能查询界面:(1)查询各景点的相关信息;(2)选定某一景点作为起始点,可查询从该景点出发到其余各景点的最佳游览路径。

三、算法分析与设计首先,此算法建立了类mgraph,通过邻接矩阵存储校园景点图,并通过构造函数初始化图,手动给校园图附上相关信息(包括景点编号、名称、简介、路径及路径长度等)。

然后,手动绘制了部分模拟校园图。

该函数包括深度优先遍历图和迪杰斯特拉最短路径算法,主要功能是实现校园七个景点(0.图书馆,1.三山楼,2.三江楼,3.教工浴室,4.西山操场,5.西山美食城,6.京江操场)的简介和最短路径的算法,最后用主函数输出结果,用switch语句分别输出,最后求出两点之间的最短路径。

四、运行结果及分析输出结果:五、总结这个程序在调试时,我发现一次只能查找一个景点的相关介绍,之后的最短路径的计算生成时是成功的,但在调试时却不是很好,输出结果有误。

通过这次算法设计实践,我对数据结构的运用有了更深的体会,对无向图和创建无向图的理解更加深刻,理解了迪杰斯特拉算法的原理,不再是盲目地照搬书上的程序。

之后,我还发现了我的不足之处,对程序的设计还不过灵活。

附录:源程序清单#include<iostream>#include<string>using namespace std;const int maxsize=100;class mgraph{public:mgraph(string a[],int n,int e);//构造函数,建立n个顶点,e条边的图~mgraph(){} //析构函数void dfstraverse(int v);//深度优先遍历void shortpath(mgraph g,int v,int r);//求v到其余各个顶点的最短路径private:string vertex[maxsize];//存放图中顶点的数组int arc[maxsize][maxsize];//存放图中边的数组int vertexnum,arcnum;//图中的顶点数和边数};mgraph::mgraph(string a[],int n,int e){int i,j,k;vertexnum=n;arcnum=e;for( i=0;i<vertexnum;i++)vertex[i]=a[i];for(i=0;i<vertexnum;i++) //初始化邻接矩阵for(j=0;j<vertexnum;j++)arc[i][j]=0;for(k=0;k<arcnum;k++)//依次输入每一条边{cout<<"请输入两个景点的编号:"<<endl;cin>>i>>j;//依次输入边依附的两个顶点的编号和距离if(i<7&&j<7)arc[i][j]=arc[j][i]=1;//置有边标志else cout<<"没有该景点!!!"<<endl;}}void mgraph::shortpath(mgraph g,int v,int r){for (int i = 0; i < vertexnum; i++)for (int j = 0; j < vertexnum; j++){arc[i][j] = 1000000;//初始化路径长度}arc[0][1]=arc[1][0]=10;arc[1][2]=arc[2][1]=5;arc[2][3]=arc[3][2]=8;arc[0][4]=arc[4][0]=15;arc[1][4]=arc[4][1]=9;arc[2][4]=arc[4][2]=10;arc[3][4]=arc[4][3]=11;arc[4][5]=arc[5][4]=12;arc[0][5]=arc[5][0]=10;arc[0][6]=arc[6][0]=14;arc[5][6]=arc[6][5]=9;int dist[maxsize]={0},s[maxsize];string path[maxsize];int k,i;for( i=0;i<g.vertexnum;i++){dist[i]=g.arc[v][i]; //初始化数组dist[n],path[n]if(dist[i]<10000)path[i]=g.vertex[v]+g.vertex[i];else path[i]="";}s[0]=v;//初始化集合sdist[v]=0;//标记顶点v为源点int num=1;while(num<g.vertexnum)//当顶点数num小于图的顶点数{for( k=0,i=0;i<g.vertexnum;i++)//在dist中查找最小值元素if((dist[i]!=0)&&(dist[i]<dist[k]))k=i;s[num++]=k;//将新生成的终点加入集合sfor(i=0;i<g.vertexnum;i++)//修改数组dist和pathif(dist[i]>dist[k]+g.arc[k][i]){dist[i]=dist[k]+g.arc[k][i];path[i]=path[k]+g.vertex[i];}}cout<<"路径长度为:"<<dist[k]<<"路径为:"<<path[k];}int main(){int aa,x,y;cout<<"欢迎进入江苏大学校园导游系统!!"<<endl;cout<<"0.图书馆,1.三山楼,2.三江楼,3.教工浴室,4.西山操场,5.西山美食城,6.京江操场"<<endl;string a[7]={"0","1","2","3","4","5","6"};string b[7]={"图书馆","三山楼","三江楼","教工浴室","西山操场","西山美食城","京江操场"};string c[7]={"图书馆:本建筑共有5层,有大量图书可供学生查阅,还可在其中自习","三山楼:2号教学楼,共8层,平时上课地点","三江楼:1号教学楼,共18层,平时上课地点","教工浴室:周二至周日开放,开放时间:14:00至20:00","西山操场:早操地点,平时自由锻炼的地方,每晚有大量人跑步","西山美食城:有大量美食可供选择,物美价廉","京江操场:位于六食堂附近,规模比西山操场略小"};mgraph tu(a,7,1);cout<<"主要景点平面图:"<<endl;cout<<" 京江操场* * * * * * * 六食堂"<<endl;cout<<" * * "<<endl;cout<<" * * "<<endl;cout<<" * * "<<endl;cout<<" * * "<<endl;cout<<" * * "<<endl;cout<<" * * * *西山美食城* * * * "<<endl;cout<<" * * * * "<<endl;cout<<" * * * * "<<endl;cout<<" * * * * "<<endl;cout<<" * * * 西山操场* *老一区* "<<endl;cout<<" * * * * * "<<endl;cout<<" * * * * * * * * * * * * * * *教工浴室"<<endl;cout<<" * * * * * "<<endl;cout<<" * * * * * "<<endl;cout<<"* * * * *东山操场* * * "<<endl;cout<<"* * * * "<<endl;cout<<"* * * * 图书馆* * * * * * * * * * * * * * * "<<endl;cout<<" * * * "<<endl;cout<<" * * * * * * * * * * * * * *三山楼 * * * *三江楼"<<endl;cout<<"请输入您想要了解的景点编号:";cin>>aa;switch(aa){case 0:cout<<"此景点为:"<<b[0]<<"\n简介:"<<c[0]<<endl;break;case 1:cout<<"此景点为:"<<b[1]<<"\n简介:"<<c[1]<<endl;break;case 2:cout<<"此景点为:"<<b[2]<<"\n简介:"<<c[2]<<endl;break;case 3:cout<<"此景点为:"<<b[3]<<"\n简介:"<<c[3]<<endl;break;case 4:cout<<"此景点为:"<<b[4]<<"\n简介:"<<c[4]<<endl;break;case 5:cout<<"此景点为:"<<b[5]<<"\n简介:"<<c[5]<<endl;break;case 6:cout<<"此景点为:"<<b[6]<<"\n简介:"<<c[6]<<endl;break;default:cout<<"您好,请输入编号为0-6的数字"<<endl;}cout<<"请输入当前所在景点的编号:";cin>>x;cout<<"请输入您要前往的景点编号:"<<endl;cin>>y;cout<<"最短路径为:"<<endl;tu.shortpath(tu,y,x);cout<<"祝大家旅途愉快!!!"<<endl;return 0;}。

数据结构试验报告校园导游

数据结构试验报告校园导游

数据结构试验报告校园导游《数据结构》课程设计报告课程名称:《数据结构课程设计》;课程设计题⽬:校园导游查询;姓名:张晓艺;院系:计算机学院;专业:数字媒体技术;年级:⼤⼆;学号: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”,调⽤最短距离和路径函数。

数据结构(C语言版)实验报告 (校园导游咨询)

数据结构(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>,有些类中或者函数中涉及函数类模块的调用,但忘记标注会导致编译错误。

数据结构实验报告(校园导游咨询)

数据结构实验报告(校园导游咨询)

软件学院学生实验报告册实验课程名称:数据结构与算法实验项目名称:校园导游咨询实验类型(打√):(基础、综合、设计√)院系:信息工程学院计算机系专业:*****姓名:*** 学号:*****指导老师:***软件学院教务处编制一、实验预习报告内容二、实验原始(数据)记录实验时间:2007 年 6 月20日(星期三第7,8 节)实验同组人:三、实验报告内容2010年6 月21日注:1、如有个别实验的实验报告内容多,实验报告册页面不够写,或有识图,画图要求的,学生应根据实验指导老师要求另附相同规格的纸张并粘贴在相应的“实验报告册”中。

2、实验报告册属教学运行材料,院系(中心)应按有关规定归档保管。

【源程序】#include<iostream.h>#include<stdlib.h>#include<string.h>#include<conio.h>#include<stdio.h>#include<process.h>#define OK 1#define ERROR 0#define MAX_CHARSTRING 100#define MAX_NAME 30#define INFINITY 32767typedef bool Status;typedef int VRType;typedef FILE *PFILE;typedef char *Infotype;//模块一:用邻接矩阵存储校园的地图struct ArcCell//弧类型表示路径{VRType adj;//路径的权值Infotype info;//路径的相关信息};struct VertexType//顶点类型表示景点{char name[MAX_NAME],number[MAX_NAME]; //景点的名称name、代号numberInfotype info;//景点的简介};struct MGraph//图类型表示校园的地图{VertexType *Vexs;//顶点向量指针ArcCell *Arcs;//邻接矩阵指针int *Short_st_Path;//存放最短路径的三维数组指针int vexnum,arcnum;//图的顶点vexnum数和弧数arcnum};int CalTwoDimPos(int b,int i,int j)//把第一维为b的二维数组的下标为[i][j]的地址转换成一维数组的地址,并返回{return i*b+j;}int CalThreeDimPos(int b,int i,int j,int k)//把第一、二维为b的三维数组的下标为[i][j][k]的地址转换成一维数组的地址,并返回{return i*b*b+j*b+k;}Status OpenWriteFile(PFILE &fp,char string[MAX_NAME])//打开写的文件名为string的文件{if(!(fp=fopen(string,"wb"))){cout<<"文件打开失败"<<endl;cout<<"Press any key to exit"<<endl;getch();exit(ERROR);}return OK;}Status OpenReadFile(PFILE &fp,char string[MAX_NAME])//打开读的文件名为string的文件{if(!(fp=fopen(string,"rb "))){cout<<"文件打开失败"<<endl;cout<<"Press any key to exit"<<endl;getch();exit(ERROR);}return OK;}Status MakeString(Infotype &ch)//分配一个字符串成功则返回1,否则返回0{if(!(ch=new char[MAX_CHARSTRING])){cout<<"字符串存储空间分配失败"<<endl;return ERROR;}return OK;}Status GetVex(int &v,char string[MAX_NAME],MGraph M)//返回图string顶点的位置,如果找到则返回它的位置,否则返回-1{for(v=M.vexnum-1;v>=0;v--)if(!(strcmp(string,M.Vexs[v].name)))return OK; return ERROR;}Status InitMGraph(MGraph &M,int n)//初始化一个顶点数为n的图{int i,adr;if(!((M.Arcs=new ArcCell[n*n])&&(M.Vexs=new VertexType[n])&&(M.Short_st_Path=new int[n*n*n]))){cout<<"图的存储空间分配失败"<<endl;exit(ERROR);}for(i=0,adr=0;i<n*n;i++,adr++)//对表示弧的邻接矩阵进行初始化{M.Arcs[adr].adj=INFINITY;M.Arcs[adr].info=NULL;}for(i=0,adr=0;i<n*n*n;i++,adr++)M.Short_st_Path[adr]=-1;return OK;}Status DestroyGraph(MGraph &M){int i,adr;for(i=0;i<M.vexnum;i++){delete(M.Vexs[i].info);M.Vexs[i].info=NULL;}delete(M.Vexs);M.Vexs=NULL;for(i=0,adr=0;i<M.vexnum*M.vexnum;i++,adr++) {if(M.Arcs[adr].info!=NULL){delete(M.Arcs[adr].info);M.Arcs[adr].info=NULL;}}delete(M.Arcs);M.Arcs=NULL;delete(M.Short_st_Path);M.Short_st_Path=NULL;return OK;}Status PutMGrap(MGraph M,char string[MAX_NAME])//把内存中的图保存在string文件中{FILE *fp;int i,adr;OpenWriteFile(fp,string);fwrite(&M.vexnum,sizeof(int),1,fp);fwrite(&M.arcnum,sizeof(int),1,fp);fwrite(M.Vexs,sizeof(VertexType),M.vexnum,fp); for(i=0;i<M.vexnum;i++)fwrite(M.Vexs[i].info,sizeof(char),MAX_CHARSTRI NG,fp);fwrite(M.Arcs,sizeof(ArcCell),M.vexnum*M.vexnum ,fp);for(i=0,adr=0;i<M.vexnum*M.vexnum;i++,adr++)if(M.Arcs[adr].info!=NULL)fwrite(M.Arcs[adr].info,sizeof(char),MAX_CHARST RING,fp);fwrite(M.Short_st_Path,sizeof(int),M.vexnum*M.vex num*M.vexnum,fp);fclose(fp);return OK;}Status GetMGrap(MGraph &M,char string[MAX_NAME])//从文件中取出一个文件名为string的图调入内存{FILE *fp;int i,adr;OpenReadFile(fp,string);fread(&M.vexnum,sizeof(int),1,fp);InitMGraph(M,M.vexnum);fread(&M.arcnum,sizeof(int),1,fp);fread(M.Vexs,sizeof(VertexType),M.vexnum,fp);for(i=0;i<M.vexnum;i++){MakeString(M.Vexs[i].info);fread(M.Vexs[i].info,sizeof(char),MAX_CHARSTRI NG,fp);}fread(M.Arcs,sizeof(ArcCell),M.vexnum*M.vexnum, fp);for(i=0,adr=0;i<M.vexnum*M.vexnum;i++,adr++) if(M.Arcs[adr].info!=NULL){MakeString(M.Arcs[adr ].info);fread(M.Arcs[adr].info,sizeof(char),MAX_CHARST RING,fp); }fread(M.Short_st_Path,sizeof(int),M.vexnum*M.vexn um*M.vexnum,fp);fclose(fp);return OK;}Status CreateMGraph()//创建一个图,并保存在string文件中{MGraph M;int i,j,k,adr,adr1;charv1[MAX_NAME],v2[MAX_NAME],string[MAX_N AME];VRType w;cout<<"请输入图的景点数和路径数:";cin>>M.vexnum>>M.arcnum;InitMGraph(M,M.vexnum);cout<<"请输入图名称、代号、简介:"<<endl;for(i=0;i<M.vexnum;i++)//输入景点的名称、代号、简介{MakeString(M.Vexs[i].info);cin>>M.Vexs[i].name>>M.Vexs[i].number>>M.Vexs[ i].info; }cout<<"请输入路径的起点、终点、权值和相关信息"<<endl;for(k=0;k<M.arcnum;k++){LEAP:cin>>v1>>v2;GetVex(i,v1,M);GetVex(j,v2,M);while(i==-1||j==-1){cout<<"输入景点名错误,请重新输入"<<endl; goto LEAP;}cin>>w;adr=CalTwoDimPos(M.vexnum,i,j);M.Arcs[adr].adj=w;MakeString(M.Arcs[adr].info);cin>>M.Arcs[adr].info;adr1=CalTwoDimPos(M.vexnum,j,i);MakeString(M.Arcs[adr1].info);M.Arcs[adr1].adj=w;strcpy(M.Arcs[adr1].info,M.Arcs[adr].info); }cout<<"请输入图的保存路径\\名称:";cin>>string;PutMGrap(M,string);DestroyGraph(M);return OK;}Status Shortest_Path_FLOYD(char string[MAX_NAME])//对以文件名为string的地图求最短路径{MGraph M;int i,j,k,n,adr,adr1,adr2,*d;GetMGrap(M,string);if(!(d=new int[M.vexnum*M.vexnum])){cout<<"数组D[i][j]存储空间分配失败"<<endl;exit(ERROR); }for(i=0;i<M.vexnum;i++)for(j=0;j<M.vexnum;j++){adr=CalTwoDimPos(M.vexnum,i,j);d[adr]=M.Arcs[adr].adj;if(d[adr]<INFINITY){adr=CalThreeDimPos(M.vexnum,i,j,0);M.Short_st_Path[adr]=i;M.Short_st_Path[adr+1]=j;}}for(i=0;i<M.vexnum;i++)for(j=0;j<M.vexnum;j++)for(k=0;k<M.vexnum;k++)if(j!=k){adr=CalTwoDimPos(M.vexnum,j,k);adr1=CalTwoDimPos(M.vexnum,j,i);adr2=CalTwoDimPos(M.vexnum,i,k);if(d[adr1]+d[adr2]<d[adr]){d[adr]=d[adr1]+d[adr2]; adr=CalThreeDimPos(M.vexnum,j,k,0);for(n=0;n<M.vexnum;n++) M.Short_st_Path[adr+n]=-1;adr1=CalThreeDimPos(M.vexnum,j,i,0);adr2=CalThreeDimPos(M.vexnum,i,k,0);for(;M.Short_st_Path[adr1]!=-1;){M.Short_st_Path[adr++]=M.Short_st_Path[adr1++]; }adr--;for(;M.Short_st_Path[adr2]!=-1;){M.Short_st_Path[adr++]=M.Short_st_Path[adr2++]; }}}PutMGrap(M,string);DestroyGraph(M);return OK;}Status Search_Shortest_Path(char string[MAX_NAME])//查询地图文件名为string的最短路径{MGraph M;char v1[MAX_NAME],v2[MAX_NAME];int i,j,k,adr;GetMGrap(M,string);cout<<"请输入起始位置和终点位置名称:"; cin>>v1>>v2;GetV ex(i,v1,M);GetVex(j,v2,M);if(i==-1||j==-1){cout<<"输入景点名错误,请重新输入"<<endl;return ERROR;}adr=CalThreeDimPos(M.vexnum,i,j,0);if(M.Short_st_Path[adr]==-1){cout<<v1<<"到"<<v2<<"的路径:没有路径"<<endl;return OK;}cout<<v1<<"到"<<v2<<"的路径:";for(k=0;M.Short_st_Path[adr]!=-1&&k<M.vexnum;a dr++,k++)cout<<M.V exs[M.Short_st_Path[adr]].name<<"-->"; cout<<"\b\b\b "<<endl;cout<<v1<<"到"<<v2<<"途经路径的信息:"<<endl; adr=CalThreeDimPos(M.vexnum,i,j,0);for(k=0;M.Short_st_Path[adr+1]!=-1&&k<M.vexnum -1;k++){i=M.Short_st_Path[adr];j=M.Short_st_Path[++adr];cout<<M.V exs[i].name<<"-->"<<M.Vexs[j].name<<"路径信息:"<<M.Arcs[CalTwoDimPos(M.vexnum,i,j)].info<<end l; }DestroyGraph(M);return OK;}Status Search_Sight(char string[MAX_NAME])//查询地图文件名为string的景点{MGraph M;char v1[MAX_NAME];int i;GetMGrap(M,string);cout<<"请输入景点名称:";cin>>v1;GetV ex(i,v1,M);if(i==-1){cout<<"输入景点名错误,请重新输入"<<endl;return ERROR; }cout<<"代号:"<<M.Vexs[i].number<<";相关信息:"<<M.Vexs[i].info<<endl;DestroyGraph(M);return OK;}Status InsertArc(char string[MAX_NAME])//对保存在string的地图增加一条弧{MGraph M;char v1[MAX_NAME],v2[MAX_NAME];int i,j,adr,adr1,w;GetMGrap(M,string);cout<<"请输入路径的起点、终点、权值和相关信息:";cin>>v1>>v2;GetV ex(i,v1,M);GetVex(j,v2,M);if(i==-1||j==-1){cout<<"输入景点名错误,请重新输入"<<endl;return ERROR; }cin>>w;adr=CalTwoDimPos(M.vexnum,i,j);M.Arcs[adr].adj=w;MakeString(M.Arcs[adr].info);cin>>M.Arcs[adr].info;adr1=CalTwoDimPos(M.vexnum,j,i);MakeString(M.Arcs[adr1].info);M.Arcs[adr1].adj=w;strcpy(M.Arcs[adr1].info,M.Arcs[adr].info);M.arcnum++;PutMGrap(M,string);DestroyGraph(M);return OK;}Status DeleteArc(char string[MAX_NAME])//对保存在string的地图删除一条弧{MGraph M;char v1[MAX_NAME],v2[MAX_NAME];int i,j,adr;GetMGrap(M,string);cout<<"请输入景点的起点、终点:";cin>>v1>>v2;GetV ex(i,v1,M);GetVex(j,v2,M);if(i==-1||j==-1){cout<<"输入景点名错误,请重新输入"<<endl;return ERROR; }adr=CalTwoDimPos(M.vexnum,i,j);M.Arcs[adr].adj=INFINITY;if(M.Arcs[adr].info!=NULL)delete(M.Arcs[adr].info);M.Arcs[adr].info=NULL;adr=CalTwoDimPos(M.vexnum,j,i);M.Arcs[adr].adj=INFINITY;if(M.Arcs[adr].info!=NULL)delete(M.Arcs[adr].info);M.Arcs[adr].info=NULL;M.arcnum--;PutMGrap(M,string);DestroyGraph(M);return OK;}void PrintMGrap(char string[MAX_NAME]) {FILE *fp;char c;OpenReadFile(fp,string);while(!feof(fp)){c=getc(fp);cout<<c;}cout<<endl;}void main(){char string[MAX_NAME],str[MAX_NAME],c,c1; do{system("cls");cout<<"************************************* ******************************************" <<endl;cout<<" *主功能及主要命令:(1)建立及修改地图C;"<<endl;cout<<" *菜(2)导游咨询T."<<endl;cout<<" *单(3)退出程序Q"<<endl;cout<<"************************************* ******************************************" <<endl;cout<<"请输入命令(C,T,Q):";cin>>c;switch(c){case 'C':system("cls");cout<<"************************************* ******************************************" <<endl;cout<<" *子功能及主要命令:(1)创建地图C;"<<endl;cout<<" *菜(2)增加一条路径A;"<<endl;cout<<" *单(3)删除一条路径D;"<<endl;cout<<" (4)返回上一级菜单Q."<<endl;cout<<"************************************* ******************************************" <<endl;do{cout<<"请输入命令(C,A,D,Q):";cin>>c1;switch(c1){case 'C':CreateMGraph();break;case 'A':cout<<"请输入要修改的地图路径\\名称"; cin>>string;InsertArc(string);break;case 'D':cout<<"请输入要修改的地图路径\\名称"; cin>>string;DeleteArc(string);break;}}while(c1!='Q');break;case 'T':cout<<"请输入要查询的地区:";cin>>string;Shortest_Path_FLOYD(string);system("cls");cout<<"************************************* ******************************************" <<endl;cout<<" 功能及主要命令:(1)显示平面图O;"<<endl;cout<<" *子(2)查询任意景点的信息I;"<<endl;cout<<" *菜(3)查询任意景点的最短路径R;"<<endl;cout<<" *单(4)返回上一级菜单Q."<<endl;cout<<"************************************* ******************************************" <<endl;do{cout<<"请输入命令(O,I,R,Q):";cin>>c1;switch(c1) {case 'O':cout<<"请输入地图的路径\\名称";cin>>str;PrintMGrap(str);break;case 'I':Search_Sight(string);break;case 'R':Search_Shortest_Path(string);break;}}while(c1!='Q'); break;};cout<<"请输入任意键继续运行程序"<<endl;getch();}while(c!='Q');}。

校园导游图系统数据结构实验报告

校园导游图系统数据结构实验报告
3.选择出发点和目的地:用户输入一个出发点和一个目的地编号,采用弗洛伊德算法求出发点到目的地的最短路径
4.查看景点信息:直接用编号进行单个景点查询。
四.详细设计
重点设计及编码
在求最短路径时采用迪杰斯特拉算法
//迪杰斯特拉算法来计算出起点到各个顶点之间的最短路径,v0为起点
void ShortestPath_DIJ(MGraph * G)
(1)将导游图看作一张带权无向图,顶点表示公园的各个景点,边表示各景点之间的道路,
边上的权值表示距离.为此图选择适当的数据结构。
(2)把各种路径都显示给游客,由游客自己选择浏览路线。
(3)画出景点分布图于屏幕上。
[实现提示]
(1)构造一个无向图G并用邻接矩阵来存储。
(2)利用迪杰斯特拉算法来计算出起点到各个顶点之间的最短路径用二维数组p[i][]来记录,
if(D[v]<INFINITY)
{p[v][v0]=1;p[v][v]=1;} //v0到v有边相连,修改p[v][v0]的值为1
}//各顶点自己到自己要连通
D[v0]=0; //自己到自己的权值设为0
final[v0]=1; //v0的访问标志设为1,v属于s集
for(i=1;i<G->vexnum;i++) //对其余g.vexnum-1个顶点w,依次求v到w的最短路径
}
for(v=0;v<G->vexnum;v++)
{
final[v]=0;//初始化各顶点访问标志
D[v]=G->arcs[v0][v].adj; //v0到各顶点v的权值赋值给d[v]
for(w=0;w<G->vexnum;w++) //初始化p[][]数组,各顶点间的路径全部设置为空路径0

校园导游图

校园导游图

《数据结构》课程设计报告设计题目校园导游图学院名称信息工程学院专业班级计算机科学与技术(2)班姓名晁勉学号 1212210226一. 题目:校园导游图二. 设计目标通过设计一个校园导游图,进一步理解数据结构中有关于图的基本概念、定义术语、存储结构等,理解图在描述现实问题中的能力,明白数据结构在程序设计中的重要性等。

三. 问题描述给出学校的导游图(景点不少于10个),游客通过终端询问可知:任一景点的相关信息:从某一景点到另一景点的最短简单路径;游戏从校园大门进入,选一条最佳路线,使游客可以不重复地游览个景点,最后回到出口(出口就在入口旁边)。

四. 需求分析需求:(1)将导游图看作一张带权无向图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息;(2)可以通过菜单提示操作,浏览校园全部景点;(3)查看所有游览路线,将某个景点的所有路线展示给游客;(4)选择出发点和目的地,将最短路线展示给游客;(5)输入景点编号,查看某个景点的信息。

分析:完成对整个校园导游图系统的功能实现,需要对的每一项功能都有清楚的设想和认识,了解并明确每一项功能的实现需要解决的问题,选择正确并且高效的算法把问题逐个解决,最终实现程序的正确调试运行。

有以下设计思路:(1)结合本校的实际情况,选出10个景点;(2)为选出的10个景点赋上相关信息(景点编号、名称、简介);(3)根据选出来的10个景点用邻接矩阵存储校园图.(4)利用C语言和数据结构编写实现校园导游图系统各功能的实现;(5)根据人为赋值的路权,设计算法计算任意两点之间的最短路径并显示;(6)综上所诉,用一个主函数把这些板块合成,生产一个菜单界面呈现在用户面前。

五. 概要设计程序由哪些模块组成以及模块之间的层次结构、各模块的调用关系;每个模块的功能.课题涉及的数据结构和数据库结构;即要存储什么数据,这些数据是什么样的结构,它们之间有什么关系等。

六. 详细设计采用C语言定义相关的数据类型写出各模块的类C码算法图的定义typedefstructArCell{intadj;//路径长度}ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedefstruct //图中顶点表示主要景点,存放景点的编号、名称、简介等信息,初始化图形MGraph *CreatUDN(MGraph *G)//接受用户输入{inti,j,k,w;char v1[20],v2[20];printf("请输入图的顶点数,弧数:");scanf("%d%d",&G->vexnum,&G-〉arcnum);printf(”请输入景点的编号、名称、简介:\n”);for(i=0;i〈G->vexnum;i++){printf(”景点编号:”);scanf(”%d”,&G-〉vexs—>num);printf("景点名称:”);scanf(”%s",G—〉vexs[i].name);printf("景点简介:”);scanf("%s",G-〉vexs—>introduction);}for(i=0;i<G—>vexnum;i++)for(j=0;j〈G—〉vexnum;j++)G-〉arcs[i][j]。

数据结构校园导游咨询系统课程设计报告及课程总结.doc

数据结构校园导游咨询系统课程设计报告及课程总结.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、查询两景点最短路径:用户在选择此功能模块后,按照屏幕上方提示的景点名称及其对应的编号,要求用户输入起点和终点的编号,系统将在已存储的景点中进行匹配,若未找到所需查询的景点编号,系统将提示错误并要求用户再次输入。

数据结构课程设计——校园导游图

数据结构课程设计——校园导游图

景德镇陶瓷学院信息工程学院班级:11计科(2)班学号:*************名:**指导老师:李娟、徐星时间:2013年6月27号题目:13*:图(校园导游图)7 :建立二叉树,层序、先序遍历14 :拓扑排序题目一:图(校园导游图)1.1、需求分析:需求:(1)将导游图看作一张带权无向图,顶点表示公园的各个景点,边表示各景点之间的道路,边上的权值表示距离。

为此图选择适当的数据结构。

(2)把各种路径都显示给游客,由游客自己选择游览路线。

(3)画出景点分布图于屏幕上。

分析:完成对整个导游图系统的功能实现,需要对的每一项功能都有清楚的设想和认识,了解并明确每一项功能的实现需要解决的问题,选择正确并且高效的算法把问题逐个解决,最终实现程序的正确调试运行。

有以下设计思路:(1).结合本校的实际情况,选出10个景点;(2).人为手工为选出的10个景点赋上相关信息(名称、代号、简介信息、以及路权等等);(3).根据选出来的10个景点用邻接矩阵存储校园图。

(4).依照景点的相关信息创建校园图。

(5).把纸质上的内容,利用C++编程语言编写查找景点相关信息的程序。

(6).根据人为赋值的路权,迪杰斯特拉算法计算任意两点之间的最短路径。

(7).综上所诉,用一个主函数把这些板块合成,生产一个菜单界面呈现在用户面前。

1.2、设计与实现:选出本校10个景点结合景德镇陶瓷学院实际情况,我选出以下10个景点,从1到10编号:图的初始化由于邻接矩阵特殊的存储方式,它非常便于快速的查找两个顶点之间的边上的权值。

所以,图采用带权的邻接矩阵存储。

决定了图的存储方式后,以华南农业大学10个景点的游览地图作为蓝本,把校园地图抽象化成顶点与边构成的图形式,如图2.2所示,途中数字代表线的权值。

1.3、模块的划分含有四个模块:(1)陶院地图信息(2)陶院景点信息(3)查找两点间最短路径(4)退出模板功能(1)将陶院的地图显示在程序运用上;(2)输入一个景点,运用程序上能够显示该景点的信息;(3)可以给游客提供两个景点的最短路径;(4)给游客提供方便。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

淮海工学院计算机工程学院
课程设计报告
设计名称:数据结构课程设计
选题名称:校园导游图
姓名:学号:
专业班级:
系(院):计算机工程学院
设计时间: 2011.12.19~2011.12.30 设计地点:软件工程实验室、教室
9 体育馆学生体育锻炼地点实际输出的信息为:
操作成功,与预期结果一致。

2.打印校园导游图的邻接矩阵:
操作成功,与预期结果一致。

3、查询景点间最短路径:
比如:
查询景点1(计算机楼)和3(图书馆)之间的最短路径,预期结果应为:
计算机楼—> 文通楼—> 图书馆,
路径总长度为35
1520
操作成功,与预期结果一致。

4、景点信息查询:
比如:查询景点为1的景点信息,预期结果应为:
景点序号(position)景点名称(name) 景点介绍(intoduction)
1 计算机楼计算机学院学生学习基地,楼高6层
与预期结果一致。

查询成功。

5、更改图的信息:
更改图信息主页面:
5.1重新建图
比如重新建一个有3个景点和3条路径的无向图:
景点信息分别为:
景点序号(position)景点名称(name) 景点介绍(intoduction)
0 计算机楼信息中心
1 第一食堂饮食中心
2 B#宿舍男生宿舍
矩阵关系为:
0 15 25
15 0 50
25 50 0
与预期结果一致,重新建图成功。

5.2删除景点:
比如删除景点编号为1的景点:
则输出的矩阵中应失去原第一行第一列,
并且其信息不再出现在校园导游中:
删除景点前的图信息:
删除景点前的矩阵:
删除景点后的图的信息和矩阵:
与预期结果一致,删除景点成功。

5.3删除两景点间的路径:
比如删除编号为0和2的两景点间的路径,则打印出来的矩阵在第0行第2列和第2行第0列的值应为0。

删除路径前的矩阵:
删除路径后的矩阵:
与预期结果一致,删除路径成功。

5.4增加景点信息
比如增加一个景点,其信息为:
景点序号(position)景点名称
(name)
景点介绍(intoduction)
10 A#7宿舍楼计算机学院女生宿舍
对应的矩阵中应增加一行一列,第10行和第10列上所有元素都应为0,输出的图信息中最后应增加上述的信息。

增加景点前的图信息:
增加景点前的矩阵:
增加景点后的图信息和矩阵:
与预期结果一致,增加景点成功。

5.5增加一条路径
比如在景点0和4之间加一条长度为10的路径,则在第0行第4列与第4行第0列元素应为10。

增加路径前的矩阵:
增加路径后的矩阵:
与预期结果一致,增加路径成功。

5.6更新图信息
比如要更新一个景点和一条路径的信息,将景点信息:
景点序号(position)景点名称
(name)
景点介绍(intoduction)
1 计算机楼计算机学院学生学习基地,楼高
6层
改为:
景点序号(position)景点名称
(name)
景点介绍(intoduction)
1 B#8 男生宿舍更改顶点编号为0和3路径长度,路径由30改为15。

更改后的图中编号为1的信息应变为:
景点序号(position)景点名称
(name)
景点介绍(intoduction)
1 B#8 男生宿舍矩阵中第0行第3列和第3行第0列元素应由30变为15.更改景点前的图信息:
更改路径前的矩阵:
更新后的图信息和矩阵:
6、查找两顶点间的所有路径
比如查找1,3两点间的所有路径,所有路径为:
五用户手册
1、进入本系统后,随即显示系统主菜单页面。

用户可在此菜单下输入各子菜单对应的数字,并按回车键,执行相应的子菜单命令。

2、查询、修改、增加、删除景点以及景点间的路径,都是通过输入景点的编号来实现的,进入主菜单时,用户最好先选择“1、学校景点介绍”和“2、打印邻接矩阵”,方便用户了解景点信息以及路径信息。

六测试成果
操作主界面
查看淮工景点平面图
打印无向图邻接矩阵
查询两顶点间的最短路径
按编号查询景点信息
查询两顶点间的所有路径:
更改图信息:
退出系统
七附录(源程序清单)
#include <iostream>
#include<malloc.h>
#include<string>
#include<iomanip>
using namespace std;
#define max_ver_num 20
#define OK 1
#define FALSE 0
#define Error -1
#define A 1000
#define TRUE 1
typedef struct arcnode//设置边的权值信息{
int adj;//路径权值
}arcnode,adjarcs[max_ver_num][max_ver_num]; typedef struct verdata//设置景点信息
{
int position;
char name[60];
char introduction[1000];
}verdata;
typedef struct mgraph
{
verdata vexs[max_ver_num];。

相关文档
最新文档