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

上传人:沈*** 文档编号:86636041 上传时间:2022-05-08 格式:DOC 页数:37 大小:140KB
返回 下载 相关 举报
大大数据结构课程设计校园导航_第1页
第1页 / 共37页
大大数据结构课程设计校园导航_第2页
第2页 / 共37页
大大数据结构课程设计校园导航_第3页
第3页 / 共37页
点击查看更多>>
资源描述
word一、课程设计目的本课程设计的目标就是要达到理论与实际应用相结合,提高学生组织数据与编写大型程序的能力,并培养根本的、良好的程序设计技能以与合作能力。设计中要求综合运用所学知识,上机解决一些与实际应用结合严密的、规模较大的问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、结实掌握数据结构和算法设计技术,掌握分析、解决实际问题的能力。通过这次设计,要求在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计与其实现等方面,加深对课程根本内容的理解。同时,在程序设计方法以与上机操作等根本技能和科学作风方面受到比拟系统和严格的训练。二、 课程设计内容1)问题描述用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。要求能够回答有关景点介绍、游览路径等问题。2)根本要求1 查询各景点的相关信息;2 查询图中任意两个景点间的最短路径。3 查询图中任意两个景点间的所有路径。(4) 增加、删除、更新有关景点和道路的信息三、课程设计过程1需求分析1设计学校的校园平面图,选取出假如干的具有代表性的景点构成一个抽象的无向带权图,顶点为景点,边的权值代表了景点间路径的长度。2将景点的序号,名称,介绍存放起来准备查询。3提供任意景点的信息;4提供任意经典的路径查询与其最优路线的查询5平面图景点的增加与删除,以与边和权值长度的改变2概要设计1:第一点是主界面的设计,首先,为了该系统各个功能的管理,设计出含有多个菜单项的主菜单界面,可以更方便的使用该系统。 2: 第二点是存储结构的设计,采取了图结构类型mgraph存储校园图的信息,景点信息用结构数组vexs存储,而且利用全局变量:visited数组用于存储顶点是否被访问标志;d数组用于存放权值和查找路径顶点的编号;campus是一个图结构的全局变量。 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-vexsi.num=i; strcpy(ga-vexs0.name,西门);strcpy(ga-vexs0.introduce,学校的正大门,设有公交站);strcpy(ga-vexs1.name,风雨篮球场);strcpy(ga-vexs1.introduce,);strcpy(ga-vexs2.name,田径场);strcpy(ga-vexs2.introduce,举办运动会,平时体育跑步锻炼等);strcpy(ga-vexs3.name,京元食堂);strcpy(ga-vexs3.introduce,新食堂);strcpy(ga-vexs4.name,苍霞湖畔);strcpy(ga-vexs4.introduce,戏称“分手湖,景色宜人); strcpy(ga-vexs5.name,思源楼);strcpy(ga-vexs5.introduce,学校王牌土木的教学区);strcpy(ga-vexs6.name,图书馆);strcpy(ga-vexs6.introduce,是大学城最高的标志性建筑);strcpy(ga-vexs7.name,北教区);strcpy(ga-vexs7.introduce,北校区集中的教学楼);strcpy(ga-vexs8.name,禾堂餐厅);strcpy(ga-vexs8.introduce,旧食堂); for(i=0;in;i+)for(j=0;jn;j+)ga-edgesij=1000;ga-edges01=1;ga-edges12=2;ga-edges13=5;ga-edges24=4;ga-edges34=9;ga-edges45=1;ga-edges48=1;ga-edges56=5;ga-edges57=7;ga-edges78=1;ga-edges67=9; for(i=0;in;i+)for(j=0;jn;j+)ga-edgesji=ga-edgesij;2确定顶点是否存在已经顶点是否已经被访问过来确定路径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-vexsi.num); gets(ga-vexsi.name);gets(ga-vexsi.introduce);for(i=0;in;i+)for(j=0;jn;j+)ga-edgesij=1000;for(k=0;ke;k+)printf(请输入%d条边的景点序号i,j和长度:,k+1);scanf(%d %d %d,&i,&j,&w); ga-edgesij=w;ga-edgesji=w;void print(graph ga) int i,j; for(i=0;iga.n;i+) for(j=0;jga.n;j+) printf(%d,ga.edgesij); if(j+1=ga.n) printf(n); void visit(graph ga) int a;printf(请输入景点编号:);scanf(%d,&a); int i;for( i=0;iga.n;i+) if(a=ga.vexsi.num) printf(景点编号为%d n,ga.vexsi.num); printf(景点名称为); puts(ga.vexsi.name); printf(景点介绍为); puts(ga.vexsi.introduce); break; if(i=ga.n)printf(无此点n);3得出景点间的最短路径void shortestpath_djst(graph ga)void shortestpath_floyd(graph ga) int i,j,k,v,u,w,d3535,p353535;for(v=0;vga.n;v+)for(w=0;wga.n;w+)dvw=ga.edgesvw;for(u=0;uga.n;u+)pvwu=0;if(dvw1000)pvwv=1;pvww=1; for(u=0;uga.n;u+)for(v=0;vga.n;v+)for(w=0;wga.n;w+)if(dvu+duwdvw)dvw=dvu+duw;for(i=0;iga.n;i+)pvwi=pvui|puwi;printf(n请输入出发点和目的地编号:);scanf(%d %d,&k,&j);printf(nn);while(kga.n|jga.n) printf(n输入的编号不存在); printf(n请重新输入编号:nn); scanf(%d %d,&k,&j); printf(nn);printf(%s,ga.vexsk.name);for(u=0;u%s,ga.vexsu.name);printf(-%s,ga.vexsj.name);printf(nnn总长度为%d千米nnn,dkj);4得到景点之间的所有路径void path(graph c,int m,int n,int k) int s,x=0; int t; t=k+1; if(dk=n & k8) for(s=0;s,c.vexsds.name); printf(%snn,c.vexsds.name); else s=0; while(sc.n) if(c.edgesdks1000)&(visiteds=0) visiteds=1; dk+1=s; path(c,m,n,t); visiteds=0; s+; void allpath(graph c) int k,i,j,m,n; printf(nn请输入您要查询的两个景点的编号:nn); scanf(%d %d,&i,&j); printf(nn); m=locatevex(c,i); n=locatevex(c,j); d0=m; for(k=0;kc.n;k+) visitedk=0; visitedm=1; path(c,m,n,0);5删除边int delarc(graph &ga) int m,n,v0,v1;if(ga.e=0)printf(图中已经无顶边,无法删除);return 1;printf(n请输入要删除的边的起点和终点的编号:);scanf(%d %d,&v0,&v1); m=locatevex(ga,v0);if(m0)printf(此顶点%d已删除,v0);return 1; n=locatevex(ga,v1); if(n0)printf(此顶点%d已删除,v1);return 1; ga.edgesmn=1000; ga.edgesnm=1000; ga.e-; return 1;int enarc(graph &ga)int m,n,distance;printf(请输入边的起点和终点编号,权值:);scanf(%d %d %d,&m,&n,&distance);while(mga.n|nga.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.edgesmn=distance;ga.edgesnm=ga.edgesmn;return 1;4调试分析内容包括:a调试过程中遇到的问题是如何解决的以与对设计与实现的回顾讨论和分析;b算法的时空分析(包括根本操作和其他算法的时间复杂度和空间复杂度的分析)和改良设想;c经验和体会等。5 用户使用说明 通过主菜单提示,选择出你所想要知道的信息,然后通过输入节点来代替景点,从而得到景点间的所有路径,最短路径等其他信息。6 测试结果 1操作的主界面(2) 学校景点的介绍(3) 学校景点从西门的禾堂餐厅的所有路径所有路径4学校景点从西门的禾堂餐厅的所有路径最短路径(5) 图的更改的界面6边的删除界面展示7 附录#define MAX 100 /数据类型的定义#include#includeusing namespace std;int visited35;int d35;struct views int num; char name10; char introduce100;typedef views datatype;typedef struct datatype vexsMAX; int edgesMAXMAX; int n,e;graph;void initgraph(graph *ga)/主要的操作界面的显示以与无向网操作 int i,j;ga-n=9;ga-e=11; for( i=0;in;i+) ga-vexsi.num=i; strcpy(ga-vexs0.name,西门);strcpy(ga-vexs0.introduce,学校的正大门,设有公交站);strcpy(ga-vexs1.name,风雨篮球场);strcpy(ga-vexs1.introduce,);strcpy(ga-vexs2.name,田径场);strcpy(ga-vexs2.introduce,举办运动会,平时体育跑步锻炼等);strcpy(ga-vexs3.name,京元食堂);strcpy(ga-vexs3.introduce,新食堂);strcpy(ga-vexs4.name,苍霞湖畔);strcpy(ga-vexs4.introduce,戏称“分手湖,景色宜人); strcpy(ga-vexs5.name,思源楼);strcpy(ga-vexs5.introduce,学校王牌土木的教学区);strcpy(ga-vexs6.name,图书馆);strcpy(ga-vexs6.introduce,是大学城最高的标志性建筑);strcpy(ga-vexs7.name,北教区);strcpy(ga-vexs7.introduce,北校区集中的教学楼);strcpy(ga-vexs8.name,禾堂餐厅);strcpy(ga-vexs8.introduce,旧食堂); for(i=0;in;i+)for(j=0;jn;j+)ga-edgesij=1000;ga-edges01=1;ga-edges12=2;ga-edges13=5;ga-edges24=4;ga-edges34=9;ga-edges45=1;ga-edges48=1;ga-edges56=5;ga-edges57=7;ga-edges78=1;ga-edges67=9; for(i=0;in;i+)for(j=0;jn;j+)ga-edgesji=ga-edgesij;int locatevex(graph ga,int v) / /查找景点在图中的序号 int i; for(i=0;in),&(ga-e);printf(请输入景点编号,景点名字,景点介绍,建立信息表:n);for(i=0;in;i+)scanf(%d,&(ga-vexsi.num); gets(ga-vexsi.name);gets(ga-vexsi.introduce);for(i=0;in;i+)for(j=0;jn;j+)ga-edgesij=1000;for(k=0;ke;k+)printf(请输入%d条边的景点序号i,j和长度:,k+1);scanf(%d %d %d,&i,&j,&w); ga-edgesij=w;ga-edgesji=w;void print(graph ga) int i,j; for(i=0;iga.n;i+) for(j=0;jga.n;j+) printf(%d,ga.edgesij); if(j+1=ga.n) printf(n); void visit(graph ga) int a;printf(请输入景点编号:);scanf(%d,&a); int i;for( i=0;iga.n;i+) if(a=ga.vexsi.num) printf(景点编号为%d n,ga.vexsi.num); printf(景点名称为); puts(ga.vexsi.name); printf(景点介绍为); puts(ga.vexsi.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,d3535,p353535;for(v=0;vga.n;v+)for(w=0;wga.n;w+)dvw=ga.edgesvw;for(u=0;uga.n;u+)pvwu=0;if(dvw1000)pvwv=1;pvww=1; for(u=0;uga.n;u+)for(v=0;vga.n;v+)for(w=0;wga.n;w+)if(dvu+duwdvw)dvw=dvu+duw;for(i=0;iga.n;i+)pvwi=pvui|puwi;printf(n请输入出发点和目的地编号:);scanf(%d %d,&k,&j);printf(nn);while(kga.n|jga.n) printf(n输入的编号不存在); printf(n请重新输入编号:nn); scanf(%d %d,&k,&j); printf(nn);printf(%s,ga.vexsk.name);for(u=0;u%s,ga.vexsu.name);printf(-%s,ga.vexsj.name);printf(nnn总长度为%d千米nnn,dkj);void path(graph c,int m,int n,int k) int s,x=0; int t; t=k+1; if(dk=n & k8) for(s=0;s,c.vexsds.name); printf(%snn,c.vexsds.name); else s=0; while(sc.n) if(c.edgesdks1000)&(visiteds=0) visiteds=1; dk+1=s; path(c,m,n,t); visiteds=0; s+; void allpath(graph c) int k,i,j,m,n; printf(nn请输入您要查询的两个景点的编号:nn); scanf(%d %d,&i,&j); printf(nn); m=locatevex(c,i); n=locatevex(c,j); d0=m; for(k=0;kc.n;k+) visitedk=0; visitedm=1; path(c,m,n,0);void newgraph(graph &ga)int changenum;int i,m,n,t,distance,v0,v1;printf(n请输入要修改景点的个数:n);scanf(%d,&changenum);while(changenumga.n)printf(n输入错误!请重新输入);scanf(%d,&changenum);for(i=0;ichangenum;i+)printf(n请输入景点的编号:);scanf(%d,&m);t=locatevex(ga,m);printf(n请输入景点的名称:);scanf(%s,ga.vexst.name);printf(n请输入景点简介:);scanf(%s,ga.vexst.introduce);printf(n请输入您要更新的边数);scanf(%d,&changenum);while(changenumga.n)printf(输入错误,请重新输入:);scanf(%d,&changenum);printf(n请输入更新边的信息: n);for(i=1;i=0&n=0)ga.edgesmn=distance;ga.edgesnm=ga.edgesmn;int delvex(graph &ga) /删除顶点int i=0,j;int m,v;if(ga.n=0)printf(图中已经无顶点);return 1;printf(n请输入要删除的景点编号:);scanf(%d,&v);while(vga.n) printf(n输入错误,请重新输入); scanf(%d,&v);m=locatevex(ga,v);if(m0)printf(此顶点%d已删除,v);return 1;for(i=m;iga.n-1;i+)strcpy(ga.vexsi.name,ga.vexsi+1.name);strcpy(ga.vexsi.introduce,ga.vexsi+1.introduce);for(i=m;iga.n-1;i+)for(j=0;jga.n;j+)ga.edgesij=ga.edgesi+1j;for(i=m;iga.n-1;i+)for(j=0;jga.n;j+)ga.edgesji=ga.edgesji+1;ga.n-;return 1;int delarc(graph &ga) /删除边int m,n,v0,v1;if(ga.e=0)printf(图中已经无顶边,无法删除);return 1;printf(n请输入要删除的边的起点和终点的编号:);scanf(%d %d,&v0,&v1); m=locatevex(ga,v0);if(m0)printf(此顶点%d已删除,v0);return 1; n=locatevex(ga,v1); if(n0)printf(此顶点%d已删除,v1);return 1; ga.edgesmn=1000; ga.edgesnm=1000; ga.e-; return 1;int enarc(graph &ga)int m,n,distance;printf(请输入边的起点和终点编号,权值:);scanf(%d %d %d,&m,&n,&distance);while(mga.n|nga.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.edgesmn=distance;ga.edgesnm=ga.edgesmn;return 1;int envex(graph &ga) /增加节点int i;printf(请输入增加节点的信息:);printf(n编号:);scanf(%d,&ga.vexsga.n.num);printf(名称:);scanf(%s,ga.vexsga.n.name);printf(简介:);scanf(%s,ga.vexsga.n.introduce);ga.n+;for(i=0;iga.n;i+)ga.edgesga.n-1i=1000;ga.edgesiga.n-1=1000; return 1;int changegraph(graph &ga)int yourchoice;printf(n请选择nn (1)删除结点 (2)删除边n);printf(n (3)增加结点 (4)增加边n);printf(n (5)更新信息 (6)返回nn );scanf(%d,&yourchoice);printf(nn);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); break; case 4: enarc(ga); break; case 5: newgraph(ga); break; case 6: return 1;printf(n请选择nn (1)删除结点 (2)删除边n);printf(n (3)增加结点 (4)增加边n);printf(n (5)更新信息 (6)返回nn );scanf(%d,&yourchoice);printf(nn);while(!(yourchoice=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( 欢迎来到某某工程院 nn);printf(n 菜单项选择择 n); printf( 1.学校景点介绍 2. 查询景点间所有路径 n); printf( 3.改图 4.查询景点间最短路径 n);printf( 5.退出 n);printf(n- 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: 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( 欢迎来到某某工程院 nn);printf(n 菜单项选择择 n); printf( 1.学校景点介绍 2. 查询景点间所有路径 n); printf( 3.改图 4.查询景点间最短路径 n);printf( 5.退出 n);printf(n- n);printf(请输入您的选择:);scanf(%d,&yourchoice);文案大全
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


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

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


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