当前位置:文档之家› 数据结构课程设计-校园导航

数据结构课程设计-校园导航

课程设计报告课程名称数据结构课程设计题目校园导航指导教师设计起始日期 ~学院计算机学院系别计算机科学与工程学生姓名班级/学号成绩一、需求分析本次实验设计的任务是实现一个简易的北京信息科技大学的校园导航平面图。

设计要包括下列要求:设计你的学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)。

本课题实现校园多个场所(至少10个)的最短路径求解。

(1)输入的形式和输入值的范围:本系统主要数据类型为字符型char及整形int,char 型主要包括单位编号,单位名称,单位简介,功能编号;输入功能编号与单位编号进行操作。

(2 ) 输出的形式:输出则通过已有的信息数据,通过相关的操作输出相应信息。

(3) 程序所能达到的功能:本程序可供任何人使用,主要功能1.浏览各单位及简介;2.查看所有游览路线;3.选择出发点和目的地求出最佳路径;4.查看某一单位信息。

(4)测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。

a.首先看到的是校园导航系统的菜单:b.查看浏览路线等待输入起始景点:C.选择出发点与目的地等待输入起始景点与目的地编号:d.参看景点信息等待输入景点编号:二、概要设计本系统包含一个文件。

设计分有菜单,显示信息,弗洛伊德算法,迪杰斯特拉算法,查找景点信息等程序段。

主程序为整系统的入口处,菜单主要实现显示系统功能,显示信息主要实现显示景点信息,弗洛伊德算法主要实现求两景点之间最短路径,迪杰斯特拉算法实现求两景点之间最短路径,查找景点信息主要实现显示某一景点信息。

系统首先通过主程序调用void main( );进入系统主菜单函数,根据用户的选择可分别进入:1.浏览各景点及简介;2.查看所有游览路线;3.选择出发点和目的地求出最佳路径;4.查看景点信息;5.退出系统。

选择“浏览各景点及简介”项,显示十个景点的有关信息,包括景点编号,景点名称,景点简介。

选择“查看所有游览路线”项,会进入输入起始景点编号的界面,输入正确编号后会显示起始景点到其余九个景点的最短路线的方案。

选择“选择出发点和目的地”项,会进入输入起始景点与目的景点的界面,输入起始景点与目的景点,并有空格隔开就得到两景点之间的最佳路径。

选择“查看景点信息”项,会进入输入要查看的景点的界面,如入后会显示该景点的有关信息。

选择“退出系统”项,就会退出程序。

三、详细设计(1)十三个单位的图0:前门1:图书馆2:教二楼3:实验楼4:操场5:教一楼6:食堂7:水房8:学一公寓9:学二公寓10:学三公寓11:学四公寓12:后门(2)主程序流程图:(3)弗洛伊德的算法:void Floyd(MGraph *G){int v,u,i,w,k,j,flag=1,p[10][10][10],D[10][10];dj; for(u=0;u<G->vexnum;u++)p[v][w][u]=0;if(D[v][w]<INFINITY){p[v][w][v]=1;p[v][w][w]=1;}}for(u=0;u<G->vexnum;u++)for(v=0;v<G->vexnum;v++)for(w=0;w<G->vexnum;w++)if(D[v][u]+D[u][w]<D[v][w]){D[v][w]=D[v][u]+D[u][w];for(i=0;i<G->vexnum;i++)p[v][w][i]=p[v][u][i]||p[u][w][i];}while(flag){cout<<"请输入出发点和目的地的编号(用空格隔开):";cin>>k>>j;if(k<0||k>G->vexnum||j<0||j>G->vexnum) ame; ame;cout<<"-->"<<G->vexs[j].name;cout<<" 总路线长"<<D[k][j]<<endl; 1”2”3”4”5”um=i;ame,"前门 ");strcpy[0].introduction,"面南.对面为北京外国专家大厦 "); strcpy[1].name,"图书馆 ");strcpy[1].introduction,"藏书几十万册,设施良好,一二楼均有阅览室 "); strcpy[2].name,"教二楼 ");strcpy[2].introduction,"学校的主要教学楼,共六层,有多个专业实验 "); strcpy[3].name,"实验楼 ");strcpy[3].introduction,"紧邻教二楼,共七层,主要为公共实验室,六层有通宵自习室 "); strcpy[4].name,"操场 ");strcpy[4].introduction,"全新塑胶跑道,中间为人工草皮足球场,排球场和篮球场 "); strcpy[5].name,"教一楼 ");strcpy[5].introduction,"学校各机关单位办公楼和双语教室 "); strcpy[6].name,"食堂 ");strcpy[6].introduction,"标准食堂,两层,清洁卫生 "); strcpy[7].name,"水房 ");strcpy[7].introduction,"配备自动刷卡系统 "); strcpy[8].name,"学一公寓");strcpy[8].introduction,"光电通信学院男生公寓 "); strcpy[9].name,"学二公寓");strcpy[9].introduction,"女生公寓 "); strcpy[10].name,"学三公寓");strcpy[10].introduction,"计算机学院男生公寓 "); strcpy[11].name,"学四公寓");strcpy[11].introduction,"大一新生公寓 "); strcpy[12].name,"后门 ");strcpy[12].introduction,"面北,对面有便利的小超市 "); for(i=0;i<;i++)for(j=0;j<;j++)[i][j].adj=INFINITY;dj=50;[0][2].adj=100;[1][5].adj=20;[1][6].adj=75;[2][3].adj=10;[2][5].adj=60;[3][4].adj=20;[4][11].adj=30;[5][6].adj=30;[6][7].adj=10;[7][8].adj=20;[8][9].adj=10;[9][10].adj=20;[10][12].adj=120;[11][12].adj=150;for(i=0;i<;i++)for(j=0;j<;j++)[j][i].adj=[i][j].adj;return G;}/******************************************************************************************* //********************************主菜单(显示输入提示)****************************************/void Menu(){cout<<" 北京信息科技大学大学导游图 "<<endl;cout<<" ┏━━━━━━━━━━━━━━━━━━━━┓"<<endl;cout<<" ┃ 1.浏览各景点及简介┃"<<endl;cout<<" ┃ 2.查看所有游览路线┃"<<endl;cout<<" ┃ 3.选择出发点和目的地┃"<<endl;cout<<" ┃ 4.查看景点信息┃"<<endl;cout<<" ┃ 5.退出系统┃"<<endl;cout<<" ┗━━━━━━━━━━━━━━━━━━━━┛"<<endl;cout<<"Option-:";}/************************************显示景点编号、名称、简介****************************************/void Browser(MGraph *G){int v;cout<<"┏━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;cout<<"┃编号┃景点名称┃简介┃"<<endl;for(v=0;v<G->vexnum;v++)cout<<"┃"<<G->vexs[v].num<<setw(5)<<"┃"<<G->vexs[v].name<<setw(10)<<"┃"<<G->vexs[v].introduction<<setw(3)<<"┃"<<endl;cout<<"┗━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;}/********************迪杰斯特拉算法来计算出起点到各个顶点之间的最短路径,v0为起点***********************/void ShortestPath_DIJ(MGraph * G){int v,w,i,min,t=0,x,flag=1,v0;int final[20], D[20], p[20][20];cout<<"┏━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;cout<<"┃编号┃景点名称┃简介┃"<<endl;for(v=0;v<G->vexnum;v++)cout<<"┃"<<G->vexs[v].num<<setw(5)<<"┃"<<G->vexs[v].name<<setw(10)<<"┃"<<G->vexs[v].introduction<<setw(3)<<"┃"<<endl;cout<<"┗━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;while(flag){cout<<"请输入一个起始景点编号:";cin>>v0;if(v0<0||v0>G->vexnum){cout<<"景点编号不存在!请重新输入景点编号:"; cin>>v0;}if(v0>=0&&v0<G->vexnum)flag=0;}for(v=0;v<G->vexnum;v++){final[v]=0;D[v]=G->arcs[v0][v].adj;for(w=0;w<G->vexnum;w++)p[v][w]=0;if(D[v]<INFINITY){p[v][v0]=1;p[v][v]=1;}}D[v0]=0;final[v0]=1;for(i=1;i<G->vexnum;i++){min=INFINITY;for(w=0;w<G->vexnum;w++)if(!final[w])if(D[w]<min){v=w;min=D[w];}final[v]=1;for(w=0;w<G->vexnum;w++)if(!final[w]&&(min+G->arcs[v][w].adj<D[w])){D[w]=min+G->arcs[v][w].adj;for(x=0;x<G->vexnum;x++)p[w][x]=p[v][x];p[w][w]=1;}}for(v=0;v<G->vexnum;v++){if(v0!=v) cout<<G->vexs[v0].name;for(w=0;w<G->vexnum;w++){if(p[v][w]&&w!=v0) cout<<"-->"<<G->vexs[w].name;t++;}if(t>G->vexnum-1&&v0!=v) cout<<" 总路线长"<<D[v]<<endl;}}/*********************************Floyd函数***************************************/ void Floyd(MGraph *G){int v,u,i,w,k,j,flag=1,p[10][10][10],D[10][10];cout<<"┏━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;cout<<"┃编号┃景点名称┃简介┃"<<endl;for(v=0;v<G->vexnum;v++)cout<<"┃"<<G->vexs[v].num<<setw(5)<<"┃"<<G->vexs[v].name<<setw(10)<<"┃"<<G->vexs[v].introduction<<setw(3)<<"┃"<<endl;cout<<"┗━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;for(v=0;v<G->vexnum;v++)for(w=0;w<G->vexnum;w++){D[v][w]=G->arcs[v][w].adj;for(u=0;u<G->vexnum;u++)p[v][w][u]=0;if(D[v][w]<INFINITY){p[v][w][v]=1;p[v][w][w]=1;}}for(u=0;u<G->vexnum;u++)for(v=0;v<G->vexnum;v++)for(w=0;w<G->vexnum;w++)if(D[v][u]+D[u][w]<D[v][w]){D[v][w]=D[v][u]+D[u][w];for(i=0;i<G->vexnum;i++)p[v][w][i]=p[v][u][i]||p[u][w][i];}while(flag){cout<<"请输入出发点和目的地的编号(用空格隔开):";cin>>k>>j;if(k<0||k>G->vexnum||j<0||j>G->vexnum){cout<<"景点编号不存在!请重新输入出发点和目的地的编号:"; cin>>k>>j;}if(k>=0&&k<G->vexnum&&j>=0&&j<G->vexnum)flag=0;}cout<<G->vexs[k].name;for(u=0;u<G->vexnum;u++)if(p[k][j][u]&&k!=u&&j!=u)cout<<"-->"<<G->vexs[u].name;cout<<"-->"<<G->vexs[j].name;cout<<" 总路线长"<<D[k][j]<<endl;}um<<setw(5)<<"┃"<<G->vexs[v].name<<setw(10)<<"┃"<<endl; cout<<"┗━━┻━━━━━━━━┛"<<endl;while(flag){cout<<"请输入要查询的景点编号:";cin>>k;if(k<0||k>G->vexnum){cout<<"景点编号不存在!请重新输入景点编号:";cin>>k;}if(k>=0&&k<G->vexnum)flag=0;}cout<<"┏━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;cout<<"┃编号┃景点名称┃简介┃"<<endl;cout<<"┃"<<G->vexs[k].num<<setw(5)<<"┃"<<G->vexs[k].name<<setw(10)<<"┃"<<G->vexs[k].introduction<<setw(3)<<"┃"<<endl;cout<<"┗━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;}//Search end。

相关主题