1、一、课程设计目得本课程设计得目标就就是要达到理论与实际应用相结合,提高学生组织数据及编写大型程序得能力,并培养基本得、良好得程序设计技能以及合作能力。设计中要求综合运用所学知识,上机解决一些与实际应用结合紧密得、规模较大得问题,通过分析、设计、编码、调试等各环节得训练,使学生深刻理解、牢固掌握数据结构与算法设计技术,掌握分析、解决实际问题得能力。通过这次设计,要求在数据结构得逻辑特性与物理表示、数据结构得选择与应用、算法得设计及其实现等方面,加深对课程基本内容得理解。同时,在程序设计方法以及上机操作等基本技能与科学作风方面受到比较系统与严格得训练。二、 课程设计内容1)问题描述用无向网表示您所
2、在学校得校园景点平面图,图中顶点表示主要景点,存放景点得编号、名称、简介等信息,图中得边表示景点间得道路,存放路径长度等信息.要求能够回答有关景点介绍、游览路径等问题。2)基本要求(1) 查询各景点得相关信息;(2) 查询图中任意两个景点间得最短路径。(3) 查询图中任意两个景点间得所有路径.(4) 增加、删除、更新有关景点与道路得信息三、课程设计过程1需求分析()设计学校得校园平面图,选取出若干得具有代表性得景点构成一个抽象得无向带权图,顶点为景点,边得权值代表了景点间路径得长度。(2)将景点得序号,名称,介绍存放起来准备查询。()提供任意景点得信息;(4)提供任意经典得路径查询及其最优路线
3、得查询(5)平面图景点得增加及删除,以及边与权值(长度)得改变2概要设计 1:第一点就是主界面得设计,首先,为了该系统各个功能得管理,设计出含有多个菜单项得主菜单界面,可以更方便得使用该系统。 2: 第二点就是存储结构得设计,采取了图结构类型(mgraph)存储校园图得信息,景点信息用结构数组ves存储,而且利用全局变量:visited数组用于存储顶点就是否被访问标志;d数组用于存放权值与查找路径顶点得编号;campus就是一个图结构得全局变量。 3: 第三点就是设计各个功能得实现,学校景点得介绍通过函数opus()来实现;查询景点间得最段路径通过Foyd(弗洛伊德)算法实现;查询景点间得所有
4、路径通过lath函数与path函数来实现;更改图得信息可以由主函数chagegrap以及其她函数可以实现。3 详细设计()主要得操作界面得显示以及无向网操作oidinitaph(graph*a)nt,j;ga=9;e=11; or( i=0;igan;i+) ga-vxs、um=i; srcp(ga-vex0、name,”西门”);stcp(gavex0、inrduce,学校得正大门,设有公交站”);scpy(gavex1、name,风雨篮球场);stcpy(a-exs、intrdue,”);srcp(a-vexs2、nae,”田径场);trcpy(ga-vs2、itoduce,”举办运动会,
5、平时体育跑步锻炼等”);strpy(avs3、ae,京元食堂”);strcpy(gve3、introduce,新食堂);stcy(gas4、ame,”苍霞湖畔”);trcpy(gavexs4、introdc,”戏称“分手湖”,景色宜人”); strcpy(ves5、name,思源楼);strcpy(gavexs5、inroue,”学校王牌土木得教学区);srcp(gaxs6、nme,”图书馆);strcpy(gaes6、itroduc,就是大学城最高得标志性建筑);strpy(gavexs7、nae,北教区);stcpy(gavxs7、irouce,北校区集中得教学楼);strcp(a-vex
6、s8、name,”禾堂餐厅);tpy(gavexs8、introue,旧食堂”); for(=;gan;+)or(j=0;jn;j+)gaedgesij10;gaes1=;ga-ges12=2;gages13=5;gaedges4=4;gaege349;g-dges45=1;gaees41;ga-edes56=5;aedges57;gaedes781;gedges67=; fo(=;i-n;+)for(j=0;jga;j+)gadgesji=gaedge;(2)确定顶点就是否存在已经顶点就是否已经被访问过来确定路径idCraegrh(gaph )int ,j,k,w;prntf(请输入顶点数与
7、边数:n);canf(”d ,(ga-n),(g-));prinf(”请输入景点编号,景点名字,景点介绍,建立信息表:n);for(i0;;i+)scanf(”%d,(gaesi、um); gt(avex、name);get(avei、itruce);for(i=0;ia-n;i+)or(j=0;edgesijw;ga-edgesi=;void print(graph ga) int i,; fo(i;iga、n;+) fr(j=0;jg、n;j+) printf(d,ga、gesij); if(j+=ga、)print(n); voi vist(grah a) ina;prinf(请输入景点
8、编号:”);cf(%d”,); int;or( =0;ia、n;i+) f(=a、vesi、n) pnf(景点编号为% ,g、ves、num); pritf(景点名称为”); put(ga、vxs、nme); pin(景点介绍为); (ga、vexs、trduce); brek; if(g、)pntf(”无此点n”);(3)得出景点间得最短路径vod shrtespah_t(grah ga)voisotestt_floyd(grph ) it i,,k,v,u,w,353,p35335;r(v=0;g、n;+)for(0;wg、n;w+)dvw=a、edgevw;for(=0;uga、n;u+
9、)pvwu=0;if(vw1000)pvw=1;pvw=; for(u=0;uga、n;+)for(=0;vga、n;v+)for(w=0;wga、n;w+)f(dvu+duwga、n) printf(n输入得编号不存在); pint(请重新输入编号:n); anf(d %d”,k,&j); printf(nn);printf(%s,ga、exk、nam);fo(u0;us”,ga、exsu、na);pr(”-%s,ga、exsj、name);pntf(n总长度为%千米nn,dkj);(4)得到景点之间得所有路径vod pah(grap c,int m,int,int k) in s,x=0;
10、 int; t=k+1; if(dk=n & 8) or(s=0;sk;s) prntf(”s,c、exsds、name); printf(sn”,c、exsds、name); els =0; while(sc、n) (c、edges0)(visiteds=)) sitd; k+1=s; th(,,n,t); vitds=0; +; oid allpath(raph c) n k,i,j,m,n; prntf(n请输入您要查询得两个景点得编号:); scanf(%d %d”,&i,&); pintf(n); =ocateve(c,i); n=locatee(c,j); 0m; for(k;k、
11、n;k+) isitedk=0; visited=; path(c,m,n,);(5)删除边in der(grap &ga) in m,n,0,1;f(ga、=0)print(图中已经无顶边,无法删除);retur ;rinf(请输入要删除得边得起点与终点得编号:”);scaf(% %d,&v0,v1); m=lctevex(g,v0);f(m0)printf(此顶点d已删除,v0);etur1; =lcatevx(ga,1); i(0)print(此顶点已删除”,v);reurn 1; ga、egesm=1000; g、edsnm=1000; 、e-; retrn 1;it enarc(gr
12、aph ga)int m,n,ditance;pif(”请输入边得起点与终点编号,权值:);scanf(d d d”,&m,n,stance);wle(m0mga、ne=11; fo( i=0;in;) gavxsi、num=i; strcpy(a-vxs0、nae,西门);stcy(gex0、intrdce,学校得正大门,设有公交站);strcpy(vxs、name,风雨篮球场”);strcp(ga-exs1、intoce,”);py(gaxs2、name,田径场”);trcpy(avexs2、ntode,举办运动会,平时体育跑步锻炼等);strcy(a-vexs3、nae,京元食堂”);r
13、cpy(gavexs、intoue,新食堂”);srcpy(gvexs、name,苍霞湖畔”);spy(gavs4、indu,”戏称“分手湖,景色宜人”); strcpy(gavexs、nme,思源楼);strcpy(ga-es5、intre,”学校王牌土木得教学区”);stcpy(aves6、name,图书馆);srcp(ga-ves6、introduc,就是大学城最高得标志性建筑”);trp(gvxs7、nae,”北教区”);sty(gavexs7、introduc,北校区集中得教学楼”);strcp(g-exs8、name,”禾堂餐厅”);strcpy(ga-vs8、introdce,旧
14、食堂); fo(i=0;iga-n;+)for(j=0;jgan;j+)ga-edgsi=000;aees011;ga-edges1=2;gaedgs3=5;ga-edges244;gedge4=9;a-edes5=1;-ges48=1;ages56=5;gaees5=;aedges78=1;aeges7=9; for(i=;igan;i+)fr(j=;jgn;j+)gaedgesi=gaeesij;intcatevex(graph g,nt ) 查找景点在图中得序号 int i; or(=0;iga、;i+) if(v=ga、vxsi、um)rtrn i; retun;oid rete_ga
15、ph(gaphg)inti,j,k,w;printf(请输入顶点数与边数:”);sanf(”d”,(ga-n),(a);printf(”请输入景点编号,景点名字,景点介绍,建立信息表:n”);fo(i=0;iga-;i+)san(d,(gexi、n)); get(gsi、name);gets(ga-vexsi、intro);for(i=0;igan;i+)r(j=;edgesi=00;o(k=0;kge;k+)rint(”请输入%d条边得景点序号i,j与长度:”,k+1);scanf(”%d %d,j,w); ga-edgeiw;ga-egs=;oidprint(graphga) ti,j;
16、or(=0;i、;i+) for(=0;jga、n;j) prif(d,、edgesij); f(j+1=ga、n) rint(); idviit(grpg) int;printf(请输入景点编号:);scf(%d”,a); n i;for( 0;ig、n;i+) if(a=ga、vexs、num) pinf(景点编号为d n”,、vexsi、nm); prtf(景点名称为); puts(ga、exs、ame); print(”景点介绍为”); put(g、vs、introce); break; if(i=a、n)rintf(无此点n”);vdrtstahdst(graph ga)void s
17、hortestpah_fyd(raph ga) it i,v,u,w,d335,p3535;o(v=0;vga、n;)fr(w=0;wga、n;+)dvw=ga、edsvw;for(u;uga、;+)vwu=0;if(dvw1000)pv=;pvw=1; fo(u0;g、;u+)r(=0;vga、n;+)r(w=0;wg、n;w+)i(vu+uwdw)vw=dvuduw;fo(i0;iga、n;i+)pvwivui|puwi;prnt(请输入出发点与目得地编号:);sanf(d %,&k,&j);rint(”);wile(kga、n|j0|jg、n) int(”输入得编号不存在”); prnf
18、(”请重新输入编号:”); canf(”dd,k,&j); prntf(n”);pritf(%,ga、exsk、name);for(u=0;uga、n;u+)if(kju k!=u j!u)printf(-s,g、vexsu、a);prin(”-%”,ga、vex、ame);printf(”nn总长度为%d千米nn”,dk);void pa(gap ,n m,intn,nt ) nt s,x=0; i t; t=+1; f(dk= k8) for(s=;sk;s+) prntf(”s-”,、vexds、ae); pintf(”sn,c、vxss、ame); else s=; while(sc、
19、n) f((c、edgesds000)&(visteds=0)) visteds=1; d+1=s; pah(c,m,n,t); isited=0; s+; void llath(graph c) int k,i,j,,n; ritf(nn请输入您要查询得两个景点得编号:nn”); sanf(d %d”,&i,&j); pri(n”); m=loatex(c,); n=loctee(c,j); d=m; fr(=;、n;+) visitedk; vsitedm=1; path(c,m,0);voiewgrp(rphg)in cngu;int i,m,t,disanc,v0,v1;prntf(n
20、请输入要修改景点得个数:”);scanf(d,&changenum);hile(angen0|chageu、n)pintf(”n输入错误!请重新输入);can(d”,&changenum);f(=;ichangenm;i+)print(请输入景点得编号:);scanf(d,&m”);t=cavex(ga,m);prinf(”n请输入景点得名称:);sa(s”,ga、vexst、name);pintf(”n请输入景点简介:”);scnf(s”,g、vexst、ntrodu);pntf(n请输入您要更新得边数);scanf(d,&changenum);while(enumga、n)pitf(输入错
21、误,请重新输入:”);canf(,cangen);printf(n请输入更新边得信息: n”);fo(i=1;ihangenm;i+)pit(”n修改得第d条边得起点终点长度为:,i);can(%d ,v0,v1,ince);=loctevex(ga,v0);n=loateex(ga,v1);f(m=0&n=0)a、edgesmn=istanc;ga、edgenm=ga、edesm;it dvx(graph g) /删除顶点it i=,;in m,v;f(g、n=)printf(”图中已经无顶点);rurn ;printf(请输入要删除得景点编号:);scanf(”d”,v);hie(v0|v
22、a、n) pitf(输入错误,请重新输入); scanf(”,&v);=lcate(a,v);(m)pitf(此顶点d已删除,v);retu 1;f(=m;iga、n-1;i+)strcy(ga、vexi、a,ga、vexsi+1、ame);strcpy(ga、vexs、introduce,ga、vexsi1、intoduce);for(i=;iga、n-1;i+)f(j0;jga、n;j+)ga、dgesij=ga、eesi1;for(i=m;iga、n;i+)for(=0;jga、n;j+)a、dgesji=a、edgj+1;ga、-;ern ;intdelarc(grap &a) /删除
23、边t m,n,v0,v1;i(ga、=)printf(图中已经无顶边,无法删除);rtur 1;printf(n请输入要删除得边得起点与终点得编号:);anf(”dd,v0,v1); m=octevex(a,v0);i(m)prinf(此顶点d已删除,0);rturn ; nocex(a,v1);if(nga、|n0nga、n)printf(”输入错误,请重新输入:);scan(d d,&m,&n);if(locatex(a,)rintf(此节点已经删除”,m);retr;if(catevex(a,n)rinf(此节点d已经删除,n);rtun1;ga、edgesmn=ditn;ga、ges=
24、ga、gn;eun;nt evex(ap&ga) /增加节点inti;pritf(请输入增加节点得信息:);tf(n编号:);sf(%d,&a、vxsga、nm);print(名称:);scanf(%s,ga、vxga、n、nae);printf(”简介:”);anf(%,ga、vexsga、n、itdue);ga、n+;fr(=0;iga、n;i+)ga、dsga、n-1i=100;g、dgsga、-=100; eturn 1;in chaegrah(graph ga)tyurcoie;pnt(n请选择nn (1)删除结点 (2)删除边n);printf(n ()增加结点 (4)增加边n);
25、prnt(n ()更新信息 ()返回nn”);scanf(”%d,yohoice);rinf(”nn);while(!(youchoic=1yourchoc2|yourhoie3youhoie=|ourchoice=5|yourchoe=6)rin(请重新输入:);sanf(d,&urchoie);wl(1)swtch(yurcie) ase 1: delvex(ga); beak; cs : delac(g); break; case 3: envex(ga); brak; cse 4: enc(g); break; ase 5: ngrah(ga); brea; ase 6: rn;rin
26、tf(n请选择nn ()删除结点 (2)删除边n);prinf(n (3)增加结点 (4)增加边n);intf(”n ()更新信息 (6)返回n );caf(%d”,&yorchoice);printf(”n);hile(!(yourhoc=yorhoice2|yorchoice=3yurcoie=4|youchoice=5|yorchoice=))pintf(请重新输入:);scanf(”%d,&youchoic); retun ;vd ainwork()int ouchice;graph ga;ntgaph(a);print(-欢迎使用校园导游程序- n);rintf(” 欢迎来到福建工程院 nn”);prit(”n 菜单选择 n); print( 、学校景点介绍 2、 查询景点间所有路径 n); rintf(” 、改图 4、查询景点间最短路径 );
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100