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

上传人:沈*** 文档编号:86636041 上传时间:2022-05-08 格式:DOC 页数:37 大小:140KB
收藏 版权申诉 举报 下载
大大数据结构课程设计校园导航_第1页
第1页 / 共37页
大大数据结构课程设计校园导航_第2页
第2页 / 共37页
大大数据结构课程设计校园导航_第3页
第3页 / 共37页
资源描述:

《大大数据结构课程设计校园导航》由会员分享,可在线阅读,更多相关《大大数据结构课程设计校园导航(37页珍藏版)》请在装配图网上搜索。

1、word 一、课程设计目的 本课程设计的目标就是要达到理论与实际应用相结合,提高学生组织数据与编写大型程序的能力,并培养根本的、良好的程序设计技能以与合作能力。 设计中要求综合运用所学知识,上机解决一些与实际应用结合严密的、规模较大的问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、结实掌握数据结构和算法设计技术,掌握分析、解决实际问题的能力。 通过这次设计,要求在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计与其实现等方面,加深对课程根本内容的理解。同时,在程序设计方法以与上机操作等根本技能和科学作风方面受到比拟系统和严格的训练。 二、 课程设计内容

2、 1)问题描述 用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。要求能够回答有关景点介绍、游览路径等问题。 2)根本要求   〔1〕 查询各景点的相关信息;   〔2〕 查询图中任意两个景点间的最短路径。   〔3〕 查询图中任意两个景点间的所有路径。 (4) 增加、删除、更新有关景点和道路的信息 三、课程设计过程 1.需求分析 〔1〕设计学校的校园平面图,选取出假如干的具有代表性的景点构成一个抽象的无向带权图,顶点为景点,边的权值代表了景点间路径的长度。 〔2〕将景点的序

3、号,名称,介绍存放起来准备查询。 〔3〕提供任意景点的信息; 〔4〕提供任意经典的路径查询与其最优路线的查询 〔5〕平面图景点的增加与删除,以与边和权值〔长度〕的改变 2.概要设计 1:第一点是主界面的设计,首先,为了该系统各个功能的管理,设计出含有多个菜单项的主菜单界面,可以更方便的使用该系统。 2: 第二点是存储结构的设计,采取了图结构类型〔mgraph〕存储校园图的信息,景点信息用结构数组vexs存储,而且利用全局变量:visited[]数组用于存储顶点是否被访问标志;d[]数组用于存放权值和查找路径顶点的编号;campus是一个图结构的全局变量。

4、3: 第三点是设计各个功能的实现,学校景点的介绍通过函数browsepus()来实现;查询景点间的最段路径通过Floyd(弗洛伊德)算法实现;查询景点间的所有路径通过allpath函数和path函数来实现;更改图的信息可以由主函数changegraph以与其他函数可以实现。 3. 详细设计 〔1〕主要的操作界面的显示以与无向网操作 void initgraph(graph *ga) { int i,j; ga->n=9; ga->e=11; for( i=0;in;i++) { ga->vexs[i].num=i; }

5、 strcpy(ga->vexs[0].name,"西门"); strcpy(ga->vexs[0].introduce,"学校的正大门,设有公交站"); strcpy(ga->vexs[1].name,"风雨篮球场"); strcpy(ga->vexs[1].introduce,""); strcpy(ga->vexs[2].name,"田径场"); strcpy(ga->vexs[2].introduce,"举办运动会,平时体育跑步锻炼等"); strcpy(ga->vexs[3].name,"京元食堂"); strcpy(ga->vexs[3].introduc

6、e,"新食堂"); strcpy(ga->vexs[4].name,"苍霞湖畔"); strcpy(ga->vexs[4].introduce,"戏称“分手湖〞,景色宜人"); strcpy(ga->vexs[5].name,"思源楼"); strcpy(ga->vexs[5].introduce,"学校王牌土木的教学区"); strcpy(ga->vexs[6].name,"图书馆"); strcpy(ga->vexs[6].introduce,"是大学城最高的标志性建筑"); strcpy(ga->vexs[7].name,"北教区"); strcpy(ga->ve

7、xs[7].introduce,"北校区集中的教学楼"); strcpy(ga->vexs[8].name,"禾堂餐厅"); strcpy(ga->vexs[8].introduce,"旧食堂"); for(i=0;in;i++) for(j=0;jn;j++) ga->edges[i][j]=1000; ga->edges[0][1]=1; ga->edges[1][2]=2; ga->edges[1][3]=5; ga->edges[2][4]=4; ga->edges[3][4]=9; ga->edges[4][5]=1; ga

8、->edges[4][8]=1; ga->edges[5][6]=5; ga->edges[5][7]=7; ga->edges[7][8]=1; ga->edges[6][7]=9; for(i=0;in;i++) for(j=0;jn;j++) ga->edges[j][i]=ga->edges[i][j]; } 〔2〕确定顶点是否存在已经顶点是否已经被访问过来确定路径 void Create_graph(graph *ga) { int i,j,k,w; printf("请输入顶点数和边数:\n"); scanf("

9、%d %d",&(ga->n),&(ga->e)); printf("请输入景点编号,景点名字,景点介绍,建立信息表:\n"); for(i=0;in;i++) { scanf("%d",&(ga->vexs[i].num)); gets(ga->vexs[i].name); gets(ga->vexs[i].introduce); } for(i=0;in;i++) for(j=0;j<=ga->n;j++) ga->edges[i][j]=1000; for(k=0;ke;k++) { printf("请输入%d条边的景点序号

10、i,j和长度:",k+1); scanf("%d %d %d",&i,&j,&w); ga->edges[i][j]=w; ga->edges[j][i]=w; } } void print(graph ga) { int i,j; for(i=0;i

11、 int a; printf("请输入景点编号:"); scanf("%d",&a); int i; for( i=0;i

12、a.n)printf("无此点\n"); } 〔3〕得出景点间的最短路径 void shortestpath_djst(graph ga){ } void shortestpath_floyd(graph ga) { int i,j,k,v,u,w,d[35][35],p[35][35][35]; for(v=0;v

13、) { p[v][w][v]=1; p[v][w][w]=1; } } } for(u=0;u

14、); while(k<0||k>ga.n||j<0||j>ga.n) { printf("\n输入的编号不存在"); printf("\n请重新输入编号:\n\n"); scanf("%d %d",&k,&j); printf("\n\n"); } printf("%s",ga.vexs[k].name); for(u=0;u%s",ga.vexs[u].name); printf("--->%s",ga.vexs[j].name);

15、 printf("\n\n\n总长度为%d千米\n\n\n",d[k][j]); } 〔4〕得到景点之间的所有路径 void path(graph c,int m,int n,int k) { int s,x=0; int t; t=k+1; if(d[k]==n && k<8) { for(s=0;s",c.vexs[d[s]].name); } printf("%s\n\n",c.vexs[d[s]].name);

16、 } else { s=0; while(s

17、anf("%d %d",&i,&j); printf("\n\n"); m=locatevex(c,i); n=locatevex(c,j); d[0]=m; for(k=0;k

18、边的起点和终点的编号:"); scanf("%d %d",&v0,&v1); m=locatevex(ga,v0); if(m<0) { printf("此顶点%d已删除",v0); return 1; } n=locatevex(ga,v1); if(n<0) { printf("此顶点%d已删除",v1); return 1; } ga.edges[m][n]=1000; ga.edges[n][m]=1000; ga.e--; return 1; } int enarc(graph &ga) { int m,n,distanc

19、e; printf("请输入边的起点和终点编号,权值:"); scanf("%d %d %d",&m,&n,&distance); while(m<0||m>ga.n||n<0||n>ga.n) { printf("输入错误,请重新输入:"); scanf("%d %d",&m,&n); } if(locatevex(ga,m)<0) { printf("此节点%d已经删除",m); return 1; } if(locatevex(ga,n)<0) { printf("此节点%d已经删除",n); return 1; } ga.edges[m][n]=di

20、stance; ga.edges[n][m]=ga.edges[m][n]; return 1; } 4.调试分析   内容包括:   a.调试过程中遇到的问题是如何解决的以与对设计与实现的回顾讨论和分析;   b.算法的时空分析(包括根本操作和其他算法的时间复杂度和空间复杂度的分析)和   改良设想;   c.经验和体会等。 5. 用户使用说明 通过主菜单提示,选择出你所想要知道的信息,然后通过输入节点来代替景点,从而得到景点间的所有路径,最短路径等其他信息。 6. 测试结果 〔1〕操作的主界面

21、 (2) 学校景点的介绍 (3) 学校景点从西门的禾堂餐厅的所有路径所有路径 〔4〕学校景点从西门的禾堂餐厅的所有路径最短路径 (5) 图的更改的界面 〔6〕边的删除界面展示 7. 附录 #define MAX 100 //数据类型的定义 #include #include using namespace std; int visited[35]; int d[35]; struct views

22、{ int num; char name[10]; char introduce[100]; }; typedef views datatype; typedef struct { datatype vexs[MAX]; int edges[MAX][MAX]; int n,e; }graph; void initgraph(graph *ga)//主要的操作界面的显示以与无向网操作 { int i,j; ga->n=9; ga->e=11; for( i=0;in;i++) { ga->vexs[i

23、].num=i; } strcpy(ga->vexs[0].name,"西门"); strcpy(ga->vexs[0].introduce,"学校的正大门,设有公交站"); strcpy(ga->vexs[1].name,"风雨篮球场"); strcpy(ga->vexs[1].introduce,""); strcpy(ga->vexs[2].name,"田径场"); strcpy(ga->vexs[2].introduce,"举办运动会,平时体育跑步锻炼等"); strcpy(ga->vexs[3].name,"京元食堂"); strcpy(ga-

24、>vexs[3].introduce,"新食堂"); strcpy(ga->vexs[4].name,"苍霞湖畔"); strcpy(ga->vexs[4].introduce,"戏称“分手湖〞,景色宜人"); strcpy(ga->vexs[5].name,"思源楼"); strcpy(ga->vexs[5].introduce,"学校王牌土木的教学区"); strcpy(ga->vexs[6].name,"图书馆"); strcpy(ga->vexs[6].introduce,"是大学城最高的标志性建筑"); strcpy(ga->vexs[7].name,"北教区"

25、); strcpy(ga->vexs[7].introduce,"北校区集中的教学楼"); strcpy(ga->vexs[8].name,"禾堂餐厅"); strcpy(ga->vexs[8].introduce,"旧食堂"); for(i=0;in;i++) for(j=0;jn;j++) ga->edges[i][j]=1000; ga->edges[0][1]=1; ga->edges[1][2]=2; ga->edges[1][3]=5; ga->edges[2][4]=4; ga->edges[3][4]=9; ga->e

26、dges[4][5]=1; ga->edges[4][8]=1; ga->edges[5][6]=5; ga->edges[5][7]=7; ga->edges[7][8]=1; ga->edges[6][7]=9; for(i=0;in;i++) for(j=0;jn;j++) ga->edges[j][i]=ga->edges[i][j]; } int locatevex(graph ga,int v) / /查找景点在图中的序号 { int i; for(i=0;i

27、=ga.vexs[i].num)return i; return -1; } void Create_graph(graph *ga) { int i,j,k,w; printf("请输入顶点数和边数:\n"); scanf("%d %d",&(ga->n),&(ga->e)); printf("请输入景点编号,景点名字,景点介绍,建立信息表:\n"); for(i=0;in;i++) { scanf("%d",&(ga->vexs[i].num)); gets(ga->vexs[i].name); gets(ga->vexs[i].in

28、troduce); } for(i=0;in;i++) for(j=0;j<=ga->n;j++) ga->edges[i][j]=1000; for(k=0;ke;k++) { printf("请输入%d条边的景点序号i,j和长度:",k+1); scanf("%d %d %d",&i,&j,&w); ga->edges[i][j]=w; ga->edges[j][i]=w; } } void print(graph ga) { int i,j; for(i=0;i

29、

30、ntf("景点名称为"); puts(ga.vexs[i].name); printf("景点介绍为"); puts(ga.vexs[i].introduce); break; } } if(i==ga.n)printf("无此点\n"); } void shortestpath_djst(graph ga) { } void shortestpath_floyd(graph ga) { int i,j,k,v,u,w,d[35][35],p[35][35][35]; for(v=0;v

31、 for(w=0;w

32、 p[v][w][i]=p[v][u][i]||p[u][w][i]; } } printf("\n请输入出发点和目的地编号:"); scanf("%d %d",&k,&j); printf("\n\n"); while(k<0||k>ga.n||j<0||j>ga.n) { printf("\n输入的编号不存在"); printf("\n请重新输入编号:\n\n"); scanf("%d %d",&k,&j); printf("\n\n"); } printf("%s",ga.vexs[k].name); for(u=0;u

33、.n;u++) if(p[k][j][u] && k!=u &&j!=u) printf("--->%s",ga.vexs[u].name); printf("--->%s",ga.vexs[j].name); printf("\n\n\n总长度为%d千米\n\n\n",d[k][j]); } void path(graph c,int m,int n,int k) { int s,x=0; int t; t=k+1; if(d[k]==n && k<8) { for(s=0;s

34、ntf("%s--->",c.vexs[d[s]].name); } printf("%s\n\n",c.vexs[d[s]].name); } else { s=0; while(s

35、llpath(graph c) { int k,i,j,m,n; printf("\n\n请输入您要查询的两个景点的编号:\n\n"); scanf("%d %d",&i,&j); printf("\n\n"); m=locatevex(c,i); n=locatevex(c,j); d[0]=m; for(k=0;k

36、int i,m,n,t,distance,v0,v1; printf("\n请输入要修改景点的个数:\n"); scanf("%d",&changenum); while(changenum<0||changenum>ga.n) { printf("\n输入错误!请重新输入"); scanf("%d",&changenum); } for(i=0;i

37、ga.vexs[t].name); printf("\n请输入景点简介:"); scanf("%s",ga.vexs[t].introduce); } printf("\n请输入您要更新的边数"); scanf("%d",&changenum); while(changenum<0||changenum>ga.n) { printf("输入错误,请重新输入:"); scanf("%d",&changenum); } printf("\n请输入更新边的信息: \n"); for(i=1;i<=changenum;i++) { printf("\n修改的第%d条边的起点

38、终点长度为:",i); scanf("%d %d %d",&v0,&v1,&distance); m=locatevex(ga,v0); n=locatevex(ga,v1); if(m>=0&&n>=0) { ga.edges[m][n]=distance; ga.edges[n][m]=ga.edges[m][n]; } } } int delvex(graph &ga) //删除顶点 { int i=0,j; int m,v; if(ga.n<=0) { printf("图中已经无顶点"); return 1; } printf("\n请

39、输入要删除的景点编号:"); scanf("%d",&v); while(v<0||v>ga.n) { printf("\n输入错误,请重新输入"); scanf("%d",&v); } m=locatevex(ga,v); if(m<0) { printf("此顶点%d已删除",v); return 1; } for(i=m;i

40、); } for(i=m;i

41、\n请输入要删除的边的起点和终点的编号:"); scanf("%d %d",&v0,&v1); m=locatevex(ga,v0); if(m<0) { printf("此顶点%d已删除",v0); return 1; } n=locatevex(ga,v1); if(n<0) { printf("此顶点%d已删除",v1); return 1; } ga.edges[m][n]=1000; ga.edges[n][m]=1000; ga.e--; return 1; } int enarc(graph &ga) { int m,

42、n,distance; printf("请输入边的起点和终点编号,权值:"); scanf("%d %d %d",&m,&n,&distance); while(m<0||m>ga.n||n<0||n>ga.n) { printf("输入错误,请重新输入:"); scanf("%d %d",&m,&n); } if(locatevex(ga,m)<0) { printf("此节点%d已经删除",m); return 1; } if(locatevex(ga,n)<0) { printf("此节点%d已经删除",n); return 1; } ga.edges

43、[m][n]=distance; ga.edges[n][m]=ga.edges[m][n]; return 1; } int envex(graph &ga) //增加节点 { int i; printf("请输入增加节点的信息:"); printf("\n编号:"); scanf("%d",&ga.vexs[ga.n].num); printf("名称:"); scanf("%s",ga.vexs[ga.n].name); printf("简介:"); scanf("%s",ga.vexs[ga.n].introduce); ga.n++; for(i=

44、0;i

45、choice); printf("\n\n"); while(!(yourchoice==1||yourchoice==2||yourchoice==3||yourchoice==4||yourchoice==5||yourchoice==6) printf("请重新输入:"); scanf("%d",&yourchoice); } while(1) { switch(yourchoice) { case 1: delvex(ga); break; case 2: delarc(ga); break; case 3: envex(ga); b

46、reak; case 4: enarc(ga); break; case 5: newgraph(ga); break; case 6: return 1; } printf("\n请选择\n\n (1)删除结点 (2)删除边\n"); printf("\n (3)增加结点 (4)增加边\n"); printf("\n (5)更新信息 (6)返回\n\n" ); scanf("%d",&yourchoice);printf("\n\n"); while(!(yourchoice=

47、=1||yourchoice==2||yourchoice==3||yourchoice==4||yourchoice==5||yourchoice==6)) { printf("请重新输入:"); scanf("%d",&yourchoice); } } return 1; } void mainwork() { int yourchoice; graph ga; initgraph(&ga); printf("\n-----------------------欢迎使用校园导游程序-------------------- \n"); printf("

48、 欢迎来到某某工程院 \n\n"); printf("\n 菜单项选择择 \n"); printf(" 1.学校景点介绍 2. 查询景点间所有路径 \n"); printf(" 3.改图 4.查询景点间最短路径 \n"); printf(" 5.退出 \n"); printf("\n----

49、----------------------------------------------------------- \n"); printf("请输入您的选择:"); scanf("%d",&yourchoice); while(!(yourchoice==1||yourchoice==2||yourchoice==3||yourchoice==4||yourchoice==5)) { printf("请重新输入:"); scanf("%d",&yourchoice); } while(1) { switch(yourchoice) { case 1:

50、 visit(ga); break; case 2: allpath(ga); break; case 3: changegraph(ga); break; case 4: shortestpath_floyd(ga); break; case 5: exit(0); break; default: break; } printf("\n-----------------------欢迎使用校园导游程序-------------------- \n"); printf(" 欢迎来到某某工程院 \n\n"); p

51、rintf("\n 菜单项选择择 \n"); printf(" 1.学校景点介绍 2. 查询景点间所有路径 \n"); printf(" 3.改图 4.查询景点间最短路径 \n"); printf(" 5.退出 \n"); printf("\n--------------------------------------------------------------- \n"); printf("请输入您的选择:"); scanf("%d",&yourchoice); } } 文案大全

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

相关资源

更多
正为您匹配相似的精品文档
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!