数据结构:校园导游实验报告_第1页
数据结构:校园导游实验报告_第2页
数据结构:校园导游实验报告_第3页
数据结构:校园导游实验报告_第4页
数据结构:校园导游实验报告_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

数据结构上机实验报告厦门大学信息科学与技术学院计算机系 姓名:彭钰杰年级:2012 指导老师:陈锦绣实验题目:校园导游问题描述:设计一个校园导游程序,为来访的客人提供各种信息查询效劳。数据结构设计:因地点与地点之间道路为双向的,所以可看成是一个无向图,本程序采用邻接多重表结构储存,在个别子函数中转化为多维数组以便运算。实验测试:构造如下的图:程序测试图:主界面景点道路修改和扩建〔模拟地图也会随之更新〕道路导航系统1.最短路径查询道路导航系统2两点间所有路径道路导航系统3多地点的最正确路径求关节点景点清单模拟地图增添景点并为其添加道路数据后模拟地图随之更新程序中并未参加自动检测输入是否错误的系统,模拟地图系统也会出现边界溢出的情况。程序代码:##include<stdio.h>#include<string.h>#include<stdlib.h>#include<windows.h>#include<conio.h>char*heng="━",*shu="┃",*zuos="┏",*zuox="┗",*yous="┓",*youx="┛";structadjinfo//路信息{ intlen;//道路长度8 intcategory;//道路类别1:车道2:人行道3:观景路径 intdir;//方向1表示i在j的西边,2表示i在j的北边,3表示i在j的西北边,4表示i在j的西南边.负数那么表示相反。};structadj//边结构体{ intmark; intivex; intjvex; adj*ilink,*jlink; adjinfoinfo;};typedefstruct//地点结构体{ charname[50]; charintro[50]; adj*firstedge;}site;typedefstruct{ sitespot[50]; intspotnum,adjnum;}graph;voidinit(graph&t)//初始化图{ t.adjnum=0; t.spotnum=0;}voidaddsite(char*Name,char*Intro,graph&t)//添加地点{ strcpy(t.spot[t.spotnum].intro,Intro); strcpy(t.spot[t.spotnum].name,Name); t.spot[t.spotnum].firstedge=NULL; t.spotnum++;}voidaddadj(inti,intj,intlength,intcate,intdi,graph&t)//添加道路{ adj*p1,*p2; intmark; p1=(adj*)malloc(sizeof(adj)); p1->ilink=NULL;p1->jlink=NULL;p1->ivex=i;p1->jvex=j;p1->mark=0; p1->info.category=cate;p1->info.dir=di;p1->info.len=length; p2=t.spot[i].firstedge; if(p2==NULL) t.spot[i].firstedge=p1; else { mark=0; while(mark==0) { if(p2->ivex==i&&p2->ilink==NULL)mark=1; elseif(p2->jvex==i&&p2->jlink==NULL)mark=2; elseif(p2->ivex==i)p2=p2->ilink; elseif(p2->jvex==i)p2=p2->jlink; } if(mark==1) p2->ilink=p1; else p2->jlink=p1; } p2=t.spot[j].firstedge; if(p2==NULL) t.spot[j].firstedge=p1; else { mark=0; while(mark==0) { if(p2->ivex==j&&p2->ilink==NULL)mark=1; elseif(p2->jvex==j&&p2->jlink==NULL)mark=2; elseif(p2->ivex==j)p2=p2->ilink; elseif(p2->jvex==j)p2=p2->jlink; } if(mark==1) p2->ilink=p1; else p2->jlink=p1; }}voidDeladj(inti,intj,graph&t)//删除道路{ intmark; adj*p1,*p2; p1=t.spot[i].firstedge; p2=p1; mark=0; while(mark==0) { if(p1->ivex==i&&p1->jvex==j&&p2->ivex==i)mark=1; elseif(p1->ivex==i&&p1->jvex==j&&p2->jvex==i)mark=2; elseif(p1->jvex==i&&p1->ivex==j&&p2->ivex==i)mark=3; elseif(p1->jvex==i&&p1->ivex==j&&p2->jvex==i)mark=4; elseif(p1->ivex==i){p2=p1;p1=p1->ilink;} elseif(p1->jvex==i){p2=p1;p1=p1->jlink;} elsemark=5; } if(mark==1) { if(p1==t.spot[i].firstedge) {t.spot[i].firstedge=p1->ilink;free(p1);} else { p2->ilink=p1->ilink; free(p1); } } elseif(mark==2) { p2->jlink=p1->ilink; free(p1); } elseif(mark==3) { p2->ilink=p1->jlink; free(p1); } elseif(mark==4) { if(p1==t.spot[i].firstedge) {t.spot[i].firstedge=p1->jlink;free(p1);} else { p2->jlink=p1->jlink; free(p1); } } elseif(mark==5) printf("找不到该道路\n"); p1=t.spot[j].firstedge; p2=p1; mark=0; while(mark==0) { if(p1->ivex==j&&p1->jvex==i&&p2->ivex==j)mark=1; elseif(p1->ivex==j&&p1->jvex==i&&p2->jvex==j)mark=2; elseif(p1->jvex==j&&p1->ivex==i&&p2->ivex==j)mark=3; elseif(p1->jvex==j&&p1->ivex==i&&p2->jvex==j)mark=4; elseif(p1->ivex==j){p2=p1;p1=p1->ilink;} elseif(p1->jvex==j){p2=p1;p1=p1->jlink;} elsemark=5; } if(mark==1) { if(p1==t.spot[j].firstedge) {t.spot[j].firstedge=p1->ilink;free(p1);} else { p2->ilink=p1->ilink; free(p1); } } elseif(mark==2) { p2->jlink=p1->ilink; free(p1); } elseif(mark==3) { p2->ilink=p1->jlink; free(p1); } elseif(mark==4) { if(p1==t.spot[j].firstedge) {t.spot[j].firstedge=p1->jlink;free(p1);} else { p2->jlink=p1->jlink; free(p1); } } elseif(mark==5) printf("找不到该道路\n");}voidDelsite(intn,graph&t)//删除地点{ inti; while(t.spot[n].firstedge) { Deladj(t.spot[n].firstedge->ivex,t.spot[n].firstedge->jvex,t); } if(n+1<t.spotnum) { for(i=n+1;i<t.spotnum;i++) { t.spot[i-1]=t.spot[i]; } } t.spotnum--;}voidprintfsite(graph&t)//打印景点清单{ printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"); printf("┃**┃景点名称┃简介┃\n"); inti; for(i=0;i<t.spotnum;i++) { printf("┃%-2d┃%-20s┃%-38s┃\n",i,t.spot[i].name,t.spot[i].intro); } printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");}voidgetlmat(graph&t,intcat,intlm[50][50][2])//得到景点路径的矩阵lm[i][j][0]存放路径长度lm[i][j][1]存放方向信息{ adj*p; inti,j; for(i=0;i<t.spotnum;i++) for(j=0;j<t.spotnum;j++) {lm[i][j][1]=0;if(i==j)lm[i][j][0]=0;elselm[i][j][0]=999;} for(i=0;i<t.spotnum;i++) { p=t.spot[i].firstedge; while(p) { if(p->info.category==cat||cat==0) { lm[p->ivex][p->jvex][0]=p->info.len; lm[p->ivex][p->jvex][1]=p->info.dir; lm[p->jvex][p->ivex][0]=p->info.len; lm[p->jvex][p->ivex][1]=-p->info.dir; } if(p->ivex==i)p=p->ilink; elsep=p->jlink; } } }voidgetshortlmat(intmat[50][50][2],graph&t,intpb[50][50][50])//由FLOYD算法得到最短路径矩阵并用pb数组记录中转节点pb[i][j][]表示i->j依次通过的节点。{ inti,j,k,m,te,g=0,time,m1; for(i=0;i<t.spotnum;i++) for(j=0;j<t.spotnum;j++) for(k=0;k<t.spotnum;k++) pb[i][j][k]=-1; for(time=0;time<t.spotnum;time++) for(i=0;i<t.spotnum;i++) { for(j=0;j<t.spotnum;j++) { for(k=0;k<t.spotnum;k++) { if(mat[i][k][0]+mat[k][j][0]<mat[i][j][0]) { mat[i][j][0]=mat[i][k][0]+mat[k][j][0]; te=k; g=1; } if(g==1) { m=0; while(pb[i][te][m]!=-1) { pb[i][j][m]=pb[i][te][m]; m++; } pb[i][j][m]=te;m++; m1=0; while(pb[te][j][m1]!=-1) { pb[i][j][m+m1]=pb[te][j][m1]; m1++; } pb[i][j][m+m1]=-1; g=0; } } } }}voidprintdir(intn)//根据DIR数值输出方向{ switch(n) { case-1:printf("东");break; case-2:printf("南");break; case-3:printf("东南");break; case-4:printf("东北");break; case1:printf("西");break; case2:printf("北");break; case3:printf("西北");break; case4:printf("西南");break; default:printf("error"); }}voidGPS1(graph&t,intcat,intstart,intdes)//寻找最短路径{ inti,j,m,g; intlmat[50][50][2],pb[50][50][50]; getlmat(t,cat,lmat); getshortlmat(lmat,t,pb); i=start;j=des;g=i; printf("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"); printf("%s到%s\n",t.spot[i].name,t.spot[j].name); printf("从%s",t.spot[i].name); for(m=0;pb[i][j][m]>=0;m++) { printf("向"); printdir(lmat[pb[i][j][m]][g][1]); printf("%d米至%s",lmat[g][pb[i][j][m]][0],t.spot[pb[i][j][m]].name); g=pb[i][j][m]; } printf("向"); printdir(lmat[j][g][1]); printf("%d米至%s",lmat[g][j][0],t.spot[j].name); printf("\n道路类别:"); if(cat==1)printf("车道\t");elseif(cat==2)printf("人行道\t");elseif(cat==3)printf("观景路径\t"); printf("总路程:%d(m)\n",lmat[i][j][0]); printf("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n");}voidgetxy(intx,inty,intdir,intdis,intbi,int&x1,int&y1)//通过坐标〔x,y〕得到与它方向为DIR距离为DIS和比例尺为BI的点坐标〔x1,y1〕{ switch(dir) { case1:y1=y;x1=x+dis/bi;break; case2:x1=x;y1=y+dis/bi;break; case3:x1=x+(dis/bi)*7/10;y1=y+(dis/bi)*7/10;break; case4:x1=x+(dis/bi)*7/10;y1=y-(dis/bi)*7/10;break; case-1:y1=y;x1=x-dis/bi;break; case-2:x1=x;y1=y-dis/bi;break; case-3:x1=x-(dis/bi)*7/10;y1=y-(dis/bi)*7/10;break; case-4:x1=x-(dis/bi)*7/10;y1=y+(dis/bi)*7/10;break; }}intmax2(intx,inty){ return((x>y)?x:y);}intmin2(intx,inty){ return((x<y)?x:y);}voidlinking(charg[100][100],intX,intY,intX1,intY1)//将〔X,Y〕和〔X1,Y1〕用'*'链接{ intx,y,x1,y1; if(X<X1){x=X;x1=X1;y=Y;y1=Y1;} else{x=X1;x1=X;y=Y1;y1=Y;} intk,i; if(x==x1) for(i=min2(y,y1);i<max2(y,y1);i++) g[i][x]='.'; else { k=10*(y1-y)/(x1-x); for(i=0;i<x1-x;i++) g[y+i*k/10][x+i]='.'; }}voidpt(charg[100][100],intx,inty,char*name)//在〔x,y〕点做一个带边框文字为name的tip{ inti,len=strlen(name); if(len%2)len++; g[y][x-2]=shu[0];g[y][x-1]=shu[1];g[y+1][x-2]=zuox[0];g[y+1][x-1]=zuox[1];g[y-1][x-2]=zuos[0];g[y-1][x-1]=zuos[1]; for(i=0;i<len;i++) { g[y-1][i+x]=heng[i%2]; g[y+1][i+x]=heng[i%2]; g[y][i+x]=name[i]; } i=i+x-1; g[y][i+1]=shu[0];g[y][i+2]=shu[1];g[y+1][i+1]=youx[0];g[y+1][i+2]=youx[1];g[y-1][i+1]=yous[0];g[y-1][i+2]=yous[1];}voidprintgraph(charg[100][100],intwei,inthei)//打印高hei宽wei的字符数组g{ inti,j; for(i=0;i<hei;i++) { for(j=0;j<wei;j++) {printf("%c",g[i][j]);} printf("\n"); }}voidDFSTip(charg[100][100],graph&t,intn,intxy[50][3],intbi)//深度遍历第n个节点,通过与它相连的边得到与他相连的节点坐标存入xy数组里,并在字符数组g中连接每个存在的路径比例尺为bi{ intmark=0; adj*tj=t.spot[n].firstedge; while(1) { if(tj->ivex==n) { if(!xy[tj->jvex][0]) { getxy(xy[n][1],xy[n][2],tj->info.dir,tj->info.len,bi,xy[tj->jvex][1],xy[tj->jvex][2]); xy[tj->jvex][0]=1; DFSTip(g,t,tj->jvex,xy,bi); } if(xy[tj->jvex][0]&&xy[n][1]>=0&&xy[n][1]<100&&xy[n][2]>=0&&xy[n][2]<=100&&xy[tj->jvex][1]>=0&&xy[tj->jvex][1]<100&&xy[tj->jvex][2]>=0&&xy[tj->jvex][2]<=100) linking(g,xy[n][1],xy[n][2],xy[tj->jvex][1],xy[tj->jvex][2]); if(!(tj=tj->ilink))break; } elseif(tj->jvex==n) { if(!xy[tj->ivex][0]) { getxy(xy[n][1],xy[n][2],-tj->info.dir,tj->info.len,bi,xy[tj->ivex][1],xy[tj->ivex][2]); xy[tj->ivex][0]=1; DFSTip(g,t,tj->ivex,xy,bi); } if(xy[tj->ivex][0]&&xy[n][1]>=0&&xy[n][1]<100&&xy[n][2]>=0&&xy[n][2]<=100&&xy[tj->ivex][1]>=0&&xy[tj->ivex][1]<100&&xy[tj->ivex][2]>=0&&xy[tj->ivex][2]<=100) linking(g,xy[n][1],xy[n][2],xy[tj->ivex][1],xy[tj->ivex][2]); if(!(tj=tj->jlink))break; } }}voidgetmap(charg[100][100],grapht,intbi,intxuhao)//由图t得到图形gxuhao表示路标上是否标出序号{ charf[30]; intxy[50][3],i;//xy[n][0]表示该节点坐标是否,xy[n][1]表示n节点时的x坐标,xy[n][2]表示y坐标 for(i=0;i<t.spotnum;i++) xy[i][0]=0; for(i=0;i<t.spotnum;i++)//连线 { if(!xy[i][0]) {xy[i][0]=1;xy[i][1]=8;xy[i][2]=(i+2)*10;DFSTip(g,t,i,xy,bi);} } for(i=0;i<t.spotnum;i++)//打印景点 { if(xy[i][0]) { if(xuhao==1) { f[0]=i+'0';f[1]='.';f[2]=0; strcat(f,t.spot[i].name); pt(g,xy[i][1],xy[i][2],f); } else { pt(g,xy[i][1],xy[i][2],t.spot[i].name); } } }}voidinitchar(charg[100][100])//初始化字符数组{ inti,j; for(i=0;i<100;i++) for(j=0;j<100;j++) g[i][j]='';}voidDFSArticul(grapht,intv,int&count,intvisited[50],intlow[50])//深度遍历寻找关节点{ adj*p=t.spot[v].firstedge; visited[v]=++count; intmin=count,w; while(p) { if(p->ivex==v) w=p->jvex; else w=p->ivex; if(!visited[w]) { DFSArticul(t,w,count,visited,low); if(low[w]<min)min=low[w]; if(low[w]>=visited[v])printf("%s\t",t.spot[v].name); }elseif(visited[w]<min)min=visited[w]; if(p->ivex==v) p=p->ilink; else p=p->jlink; } low[v]=min;}voidfindarticul(grapht)//递归深度遍历图T寻找关节点{ printf("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"); printf("关节点为:"); adj*p; intcount=1,visited[50],i,v,low[50]; visited[0]=1;low[0]=1; for(i=1;i<t.spotnum;i++){visited[i]=0;} p=t.spot[0].firstedge; if(p->ivex==0)v=p->jvex; elsev=p->ivex; DFSArticul(t,v,count,visited,low); if(count<t.spotnum) { printf("%s\t",t.spot[0].name); while(1) { if(p->ivex==0&&!p->ilink)break; elseif(p->ivex==0){p=p->ilink;v=p->jvex;if(!visited[v])DFSArticul(t,v,count,visited,low);} elseif(p->jvex==0&&!p->jlink)break; elseif(p->jvex==0){p=p->jlink;v=p->ivex;if(!visited[v])DFSArticul(t,v,count,visited,low);} } } printf("\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n");}voidnewaddsite(inti,intpas[50],intnow[50],graph&g,grapht)//把图t中的第i个节点参加到图g中用PAS和now两个数组储存新旧两个节点关联信息。{ pas[g.spotnum]=i;now[i]=g.spotnum;addsite(t.spot[i].name,t.spot[i].intro,g);}voidbestroute(grapht,graph&g)//寻找最短路径不考虑来回.以图象形式输出.用prim算法结合最短路径的算法.但有些句子过长,还存在缺乏,但时间不充裕。就不做修改了。{ inti,m[50][4],n,lm[50][50][2],cat,pb[50][50][50],j,pas[50],min[2]={999,0},k,now[50],x; printf("请输入查询路径类型1:车道2:人行道3:观景路径\t"); scanf("%d",&cat); printf("\n请输入此次最正确路径上的景点数目\t"); scanf("%d",&n); init(g); for(i=0;i<n;i++) { printf("\n请输入第%d个景点序号共需输入%d个景点序号\n",i+1,n); scanf("%d",&m[i][1]); m[i][0]=1;m[i][3]=999; } getlmat(t,cat,lm); getshortlmat(lm,t,pb); newaddsite(m[0][1],pas,now,g,t);m[0][0]=0; printf("\n最小路径图如下\n"); for(k=1;k<n;k++) { min[0]=999; x=0; for(i=0;i<n;i++) { if(m[i][0]) { x++; for(j=0;j<g.spotnum;j++) if(lm[pas[j]][m[i][1]][0]<m[i][3]){m[i][3]=lm[pas[j]][m[i][1]][0];m[i][2]=j;} } } if(!x)break; for(i=0;i<n;i++) if(min[0]>m[i][3]&&m[i][0]){min[0]=m[i][3];min[1]=i;} if(min[0]==0)m[min[1]][0]=0; elseif(m[min[1]][0]) { if(pb[pas[m[min[1]][2]]][m[min[1]][1]][0]>=0) { newaddsite(pb[pas[m[min[1]][2]]][m[min[1]][1]][0],pas,now,g,t); addadj(m[min[1]][2],now[pb[pas[m[min[1]][2]]][m[min[1]][1]][0]],lm[pas[m[min[1]][2]]][pb[pas[m[min[1]][2]]][m[min[1]][1]][0]][0],cat,lm[pas[m[min[1]][2]]][pb[pas[m[min[1]][2]]][m[min[1]][1]][0]][1],g); for(i=1;pb[pas[m[min[1]][2]]][m[min[1]][1]][i]>=0;i++) { newaddsite(pb[pas[m[min[1]][2]]][m[min[1]][1]][i],pas,now,g,t); addadj(now[pb[pas[m[min[1]][2]]][m[min[1]][1]][i-1]],now[pb[pas[m[min[1]][2]]][m[min[1]][1]][i]],lm[pb[pas[m[min[1]][2]]][m[min[1]][0]][i-1]][pb[pas[m[min[1]][2]]][m[min[1]][1]][i]][1],cat,lm[pb[pas[m[min[1]][2]]][m[min[1]][1]][i-1]][pb[pas[m[min[1]][2]]][m[min[1]][1]][i]][1],g); } newaddsite(m[min[1]][1],pas,now,g,t); addadj(now[pb[pas[m[min[1]][2]]][m[min[1]][1]][i-1]],now[m[min[1]][1]],lm[pb[pas[m[min[1]][2]]][m[min[1]][1]][i-1]][m[min[1]][1]][0],cat,lm[pb[pas[m[min[1]][2]]][m[min[1]][1]][i-1]][m[min[1]][1]][1],g); } else { newaddsite(m[min[1]][1],pas,now,g,t); addadj(now[m[min[1]][1]],m[min[1]][2],lm[m[min[1]][1]][pas[m[min[1]][2]]][0],cat,lm[m[min[1]][1]][pas[m[min[1]][2]]][1],g); } m[min[1]][0]=0; } }}voiddfspaths(intstart,intdes,grapht,intvisited[50],intstack[50],intstacklen,intlm[50][50][2])//从start深度遍历图当寻找到下一节点为des时输出{ inti,mt=0; visited[start]=1; adj*p=t.spot[start].firstedge; while(p) { if(p->ivex==start) { if(!visited[p->jvex]) { if(p->jvex==des) { stack[stacklen]=des;stacklen++; printf("从%s",t.spot[stack[0]].name); for(i=1;i<stacklen;i++) { printf("向"); printdir(lm[stack[i]][stack[i-1]][1]); printf("%d米至%s",lm[stack[i]][stack[i-1]][0],t.spot[stack[i]].name); } printf("\n");stacklen--; } else { stack[stacklen]=p->jvex;stacklen++; dfspaths(p->jvex,des,t,visited,stack,stacklen,lm); visited[p->jvex]=0; stacklen--; } } p=p->ilink; } elseif(p->jvex==start) { if(!visited[p->ivex]) { if(p->ivex==des) { stack[stacklen]=des;stacklen++; printf("从%s",t.spot[stack[0]].name); for(i=1;i<stacklen;i++) { printf("向"); printdir(lm[stack[i]][stack[i-1]][1]); printf("%d米至%s",lm[stack[i]][stack[i-1]][0],t.spot[stack[i]].name); } printf("\n");stacklen--; } else { stack[stacklen]=p->ivex;stacklen++; dfspaths(p->ivex,des,t,visited,stack,stacklen,lm); visited[p->ivex]=0; stacklen--; } } p=p->jlink; } }}voidfindpaths(intstart,intdes,grapht)//深度遍历求两点间的所有路径{ inti,visited[50],stack[50],stacklen=1,lm[50][50][2]; stack[0]=start; getlmat(t,0,lm); for(i=0;i<t.spotnum;i++)visited[i]=0; printf("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"); dfspaths(start,des,t,visited,stack,stacklen,lm); printf("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n");}voidprintmap(grapht,intxuhao,intbi)//打印图t,xuhao表示是否标注景点序号,bi为比例尺.{ charg[100][100]; initchar(g); getmap(g,t,bi,xuhao); printgraph(g,100,40);}voidpathsfinder(grapht)//两景点所有路径界面{ ints,e; printf("\t请输入起点序号\t"); scanf("%d",&s); printf("\t请输入终点序号\t"); scanf("%d",&e); findpaths(s,e,t);}voidgpsshort(grapht)//两景点最短路径界面{ inti,j,cat; printf("输入查询最路径道路类别〔1:车道2:人行道3:观景路径〕\t"); scanf("%d",&cat); printf("输入查询最路径起点序号\t"); scanf("%d",&i); printf("输入查询最路径终点序号\t"); scanf("%d",&j); GPS1(t,cat,i,j); }voidgpsmain(grapht){ graphg; intx; printf("┏━━━━━━━━━━━━━┓\n"); printf("┃1.两景点最短路径┃\n"); printf("┃2.两景点所有路径┃\n"); printf("┃3.多景点最正确路径┃\n"); printf("┃4.退出该菜单┃\n"); printf("┗━━━━━━━━━━━━━┛\n"); printf("当前为道路导航系统:输入操作号:\t"); scanf("%d",&x); switch(x) { case1:gpsshort(t);break; case2:pathsfinder(t);break; case3: bestroute(t,g);printmap(g,0,4);break; default:break; }}voidadsite(graph&t)//新增景点界面{ charname[20],intro[30]; printf("\t请输入参加地点名称\t"); scanf("%s",name); printf("\t请输入简介\t"); scanf("%s",intro); addsite(name,intro,t); printf("\t录入成功新景点编号为%d\n",t.spotnum-1);}voiddelsitemain(graph&t)//删除景点界面{ inti; printf("\t请输入删除地点序号〔该操作同时删除相关联的道路〕\t"); scanf("%d",&i);Delsite(i,t); printf("删除成功\n");}voidadadj(graph&t)//新增道路界面{ inti,j,di,len,cat; printf("\t请输入所加路径的两个节点序号(i,j)\t"); scanf("%d%d",&i,&j); printf("请输入方向〔1表示i在j西方,2表示i在j的北边,3表示i在j的西北边,4表示i在j的西南边.负数那么表示相反\n"); scanf("%d",&di); printf("请输入道路长度\t"); scanf("%d",&len); printf("请输入道路类别〔1:车道2:人行道3:观景路径〕\t"); scanf("%d",&cat); addadj(i,j,len,cat,di,t); printf("\t录入成功\n");}voiddeladjmain(graph&t)//删除道路界面{ inti,j; printf("\t请输入要删除道路的两端序号\t"); scanf(

温馨提示

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

评论

0/150

提交评论