校园导游图数据结构课程设计_第1页
校园导游图数据结构课程设计_第2页
校园导游图数据结构课程设计_第3页
校园导游图数据结构课程设计_第4页
校园导游图数据结构课程设计_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.校园导游系统班级:0809103班15 .程序 .路路virtualC++6.0.该程序运用数据结构中的图的邻接表的存储方式,用顶点来存储景点的名称和景点信息等,用边来存储路径的长度等信最后,用图的添加、删除、修改等基本操作完成对校园导游图按任意键返回后,再输入“e”,返回主菜单,选择“2.、查询两景:按任意键返回主菜单,选择“3.、查询两景点间所有路线”,再输按任意键返回主菜单,选择“4”添加新的景点和路径,输入新的选择“5”删除景点和路径,之后可以按照景点编号或景点名称查询景修改景点描述的选择,我们输入“2”修改景点描述,再输入新的景点最后,我们选择“7”创建一个新的校园导游图,然后输入新的学校名.只好把更早的C语言程序设计找出来去看。但是,通过翻书去寻找.ludestringh#include"stdio.h"#include"stdio.h"#include"malloc.h"#include"stdlib.h"defineMax.ypedefstructArcCellintadj;/*相邻接的景点之间的路程*/}ArcCell;/*定义边的类型*/ypedefstructVertexTypeintnumber;/*景点编号*/charsight[100];/*景点名称*/chardescription[1000];/*景点描述*/}VertexType;/*定义顶点的类型*/pedefstructVertexTypevex[20];/*图中的顶点,即为景点*/ArcCellarcs[20][20];/*图中的边,即为景点间的距离*/intvexnum,arcnum;/*顶点数,边数*/}MGraph;/*定义图的类型*/MGraphG;/*把图定义为全局变量*/meofschoolintP[20][20];/**/intp上的各顶点*/intvisited顶点被访问的情况*/longintD[20];/*辅助变量存储最短路径长度*/intxvoidCreateUDN(intv,inta);/*造图函数*/voidnarrate();/*说明函数*/voidShortestPathintnum);/*最短路径函数*/voidoutputintsight1,intsight2);/*输出函数*/charMenu();/*主菜单*/voidsearch();/*查询景点信息*/charSearchMenu();/*查询子菜单*/voidHaMiTonian(int);/*哈密尔顿图的遍历*/voidSearchpath(MGraphg);/*查询两个景点间的所有路径*/voiddisppathMGraphg,inti,intj);voidpath(MGraphg,inti,intj,intk);/*确定路径上第k+1个顶点voidNextValue(int);voiddisplay();/*显示遍历结果*/intAddnewsightintntDeletesightintnvoidChangesight);/*修改景点和路径*/charChangemenu();/*修改路径或顶点的选择菜单*/charSightmenu();/*选择需该景点的菜单*/voidNewCreateUDN);/*创建新的导游图*/voidmain()/*主函数*/{lorM{{eprintf("\n\n\t\t\t请选择起点景点(0~%d):",NUM-1);printf("\t\t\t请选择终点景点(0~%d):",NUM-1);ShortestPath(v0);/*计算两个景点之间的最短路径*/output(v0,v1);/*输出结果*/x;Nlecke}charMenu()/*主菜单*/{gprintf("\t\t\t┃printfttte┃\n");printfttt┃\n");printftttn);ifccc||c=='4'||c=='5'||c=='6'||c=='7'||c=='e')gag}charSearchMenu()/*查询子菜单*/{gprintf("\t\t\t┃printf("\t\t\t┃printftttn);ifcccegag}voidsearch()/*查询景点信息*/{e{nu{eforiiNUMi++){mber{tfnntttsnnGvexidescription}}{}foriiNUMi++){meGvexisight{tfnntttsnnGvexidescription}}{}}lece}voidCreateUDN(intv,inta)/*造图函数*/{cpynameofschoolG.vexnum=v;/*初始化结构中的景点数和边数*/for(i=0;i<20;++i)G.vex[i].number=i;/*初始化每一个景点的编号*//*初始化每一个景点名及其景点描述*/cpyGvexsightcpyGvexsightcpyGvexsighttrcpyGvexsightstrcpyGvexdescriptioncpyGvexsightpyGvexdescriptioncpyGvexsightstrcpyGvexdescription);cpyGvexsightstrcpyGvexdescriptionpyGvexsightstrcpyGvexdescription楼");pyGvexsightstrcpyGvexdescription楼");的边假定为20000,含义是这两个景点之间是不可到达*/forii0;++i)forjj0;++j)jMax/*离GarcsadjGarcsadj=50;GarcsadjGarcsadj=200;GarcsadjGarcsadj=300;GarcsadjGarcsadj=150;GarcsadjGarcsadj=100;GarcsadjGarcsadj=200;GarcsadjGarcsadj=100;GarcsadjGarcsadj=75;GarcsadjGarcsadj=300;GarcsadjGarcsadj=600;GarcsadjGarcsadj=200;}voidnarrate()/*说明函数*/{printf("\n\t***************欢迎使用%s校园导游程序***\n",nameofschool);printft____________________________________________\n");printft__________|_________________________________\n");foriiNUMi++){dstttsc\n",3,i,G.vex[i].sight,G.vex[i].description,3);/*输出景点列表*/}printft__________|_________________________________\n");}voidShortestPath(intnum)/*迪杰斯特拉算法最短路径函数num为入口点的编号*/{intv,w,i,t;/*i、w和v为计数变量*/intfinal[20];/**/forvvNUMv++){final[v]=0;/*假设从顶点num到顶点v没有最短路径*/D[v]=G.arcs[num][v].adj;/*将与之相关的权值放入D中存放for(w=0;w<NUM;w++)/*设置为空路径*/if(D[v]<20000)/*存在路径*/{P[v][num]=1;/*存在标志置为一*/P[v][v]=1;/*自身到自身*/}}final[num]=1;/*初始化num顶点属于S集合*/num径,并将其加入到S集合*/for(i=0;i<NUM;++i)/*其余G.vexnum-1个顶点*/{min=Max;/*当前所知离顶点num的最近距离*/forwwNUM++w)if(!final[w])/*w顶点在v-s中*/if(D[w]<min)/*w顶点离num顶点更近*/{w}final[v]=1;/*离num顶点更近的v加入到s集合*/for(w=0;w<NUM;++w)/*更新当前最短路径极其距离if(!final[w]&&((min+G.arcs[v][w].adj)<D[w]))/*不在s集合,并且比以前所找到的路径都短就更新当前路径*/{jforttNUMt++)}}}voidoutput(intsight1,intsight2)/*输出函数*/{.a=sight2;/*将景点二赋值给a*/if(a!=sight1)/*如果景点二不和景点一输入重合,则进行...{printf("\n\t从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);/*输出提示信息*/printf("\t(最短距离为%dm.)\n\n\t",D[a]);/*输出sight1到sight2的最短路径长度,存放在D[]数组中*/printf("\t%s",G.vex[sight1].sight);/*输出景点一的名称*/d=sight1;/*将景点一的编号赋值给d*/forccNUM++c){gate:;/*标号,可以作为goto语句跳转的位置*/tforbbNUMb++){if(G.arcs[d][b].adj<20000&&P[a][b])/*如果景点一和它的一个临界点之间存在路径且最短路径*/{printf("-->%s",G.vex[b].sight);/*输出此节点的名称.q=q+1;/*计数变量加一,满8控制输出时的换行d=b;/*将b作为出发点进行下一次循环输出,如此反复*/ntfn}}}}}voidSearchpath(MGraphg)/*查询两个景点间的所有路径*/{if(i==g.vex[k].number)i=k;/*在网中找到其编号与输入的forlgvexnuml+)if(j==g.vex[l].number)j=l;/*在网中找到其编号与输入printf("\n从%s到%s的所有游览路径有:\n\n",g.vex[i].sight,g.vex[j].sight);/*输出出发景点和目地景点的名disppath(g,i,j);/*调用disppath函数,用来输出两个景*/}voiddisppathMGraphg,inti,intj){forkkgvexnum;k++)a}voidpath(MGraphg,inti,intj,intk){kj{forss<=k-1;s++)/*输出一条路径*/{xpssight}//cout<<g.vex[p[s]].sight;expssight}ilesgvexnum{fsi{fgarcspksadjMaxvisiteds{visiteds1,即已访问的*/jk}}}}.tn{charsightdescription;htcriptionxnsightsightxndescriptiondescriptionnforiini++)systemcls);printf输入此景点到第%d个景点的距离(单位:m) (同一景点或不可到达用20000表示):\n",i);gth.rcsniadjGarcsinadjlength}}esightintn{enu{eforiiNUMi++){mber{forjjNUMj++){csijadjGarcsijadjGarcsjiadj00;}}}fornumNUMnum){trcpyGvexnumsightGvexnumsightcpyGvexnumdescriptionGvexnumdescription}{}foriiNUMi++){meGvexisight{forjjNUMj++){csijadjGarcsijadjGarcsjiadj00;}}}fornumNUMnum){cpyGvexnumsigh

温馨提示

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

评论

0/150

提交评论