版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
數(shù)據(jù)結(jié)構(gòu)上機實驗報告廈門大學信息科學與技術(shù)學院計算機系 姓名:彭鈺杰年級:2012 指導老師:陳錦繡實驗題目:校園導游問題描述:設計一個校園導游程序,為來訪的客人提供各種信息查詢效勞。數(shù)據(jù)結(jié)構(gòu)設計:因地點與地點之間道路為雙向的,所以可看成是一個無向圖,本程序采用鄰接多重表結(jié)構(gòu)儲存,在個別子函數(shù)中轉(zhuǎn)化為多維數(shù)組以便運算。實驗測試:構(gòu)造如下的圖:程序測試圖:主界面景點道路修改和擴建〔模擬地圖也會隨之更新〕道路導航系統(tǒng)1.最短路徑查詢道路導航系統(tǒng)2兩點間所有路徑道路導航系統(tǒng)3多地點的最正確路徑求關(guān)節(jié)點景點清單模擬地圖增添景點并為其添加道路數(shù)據(jù)后模擬地圖隨之更新程序中并未參加自動檢測輸入是否錯誤的系統(tǒng),模擬地圖系統(tǒng)也會出現(xiàn)邊界溢出的情況。程序代碼:##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的西南邊.負數(shù)那么表示相反。};structadj//邊結(jié)構(gòu)體{ intmark; intivex; intjvex; adj*ilink,*jlink; adjinfoinfo;};typedefstruct//地點結(jié)構(gòu)體{ 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數(shù)組記錄中轉(zhuǎn)節(jié)點pb[i][j][]表示i->j依次通過的節(jié)點。{ 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)//根據(jù)DIR數(shù)值輸出方向{ 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的字符數(shù)組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個節(jié)點,通過與它相連的邊得到與他相連的節(jié)點坐標存入xy數(shù)組里,并在字符數(shù)組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]表示該節(jié)點坐標是否,xy[n][1]表示n節(jié)點時的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])//初始化字符數(shù)組{ 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])//深度遍歷尋找關(guān)節(jié)點{ 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尋找關(guān)節(jié)點{ printf("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"); printf("關(guān)節(jié)點為:"); 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個節(jié)點參加到圖g中用PAS和now兩個數(shù)組儲存新舊兩個節(jié)點關(guān)聯(lián)信息。{ pas[g.spotnum]=i;now[i]=g.spotnum;addsite(t.spot[i].name,t.spot[i].intro,g);}voidbestroute(grapht,graph&g)//尋找最短路徑不考慮來回.以圖象形式輸出.用prim算法結(jié)合最短路徑的算法.但有些句子過長,還存在缺乏,但時間不充裕。就不做修改了。{ 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請輸入此次最正確路徑上的景點數(shù)目\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深度遍歷圖當尋找到下一節(jié)點為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ǒng):輸入操作號:\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請輸入?yún)⒓拥攸c名稱\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請輸入刪除地點序號〔該操作同時刪除相關(guān)聯(lián)的道路〕\t"); scanf("%d",&i);Delsite(i,t); printf("刪除成功\n");}voidadadj(graph&t)//新增道路界面{ inti,j,di,len,cat; printf("\t請輸入所加路徑的兩個節(jié)點序號(i,j)\t"); scanf("%d%d",&i,&j); printf("請輸入方向〔1表示i在j西方,2表示i在j的北邊,3表示i在j的西北邊,4表示i在j的西南邊.負數(shù)那么表示相反\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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 南京郵電大學《程序設計語言B》2023-2024學年第一學期期末試卷
- 江西省上饒市2024年中考數(shù)學二模試題含答案
- 九江職業(yè)大學《商業(yè)推廣設計》2023-2024學年第一學期期末試卷
- 江蘇航空職業(yè)技術(shù)學院《Premere視頻編輯應用與實踐》2023-2024學年第一學期期末試卷
- 黃淮學院《舞蹈編創(chuàng)(一)》2023-2024學年第一學期期末試卷
- 【物理】第十二章 簡單機械 章末練習-2024-2025學年八年級下冊人教版物理
- 重慶商務職業(yè)學院《工程制圖與CAD》2023-2024學年第一學期期末試卷
- 重慶第二師范學院《藥物流行病學》2023-2024學年第一學期期末試卷
- 浙江長征職業(yè)技術(shù)學院《普通生物學(一)》2023-2024學年第一學期期末試卷
- 浙江橫店影視職業(yè)學院《建筑工程計里與計價》2023-2024學年第一學期期末試卷
- 鋼材壓延加工生產(chǎn)技術(shù)
- 農(nóng)村教師政協(xié)提案范文
- JT-T 1495-2024 公路水運危險性較大工程專項施工方案編制審查規(guī)程
- 2024年高級養(yǎng)老護理員職業(yè)鑒定考試題庫大全-下(多選、判斷題)
- 數(shù)學學科的重要性與應用
- 【閱讀提升】部編版語文五年級下冊第二單元閱讀要素解析 類文閱讀課外閱讀過關(guān)(含答案)
- 病理科醫(yī)院感染控制
- 購銷合同電子版完整版
- 福建省福州市延安中學2023-2024學年八年級上學期期末物理模擬試卷+
- 2024年度醫(yī)院肝膽外科實習生帶教計劃課件
- 微機原理與接口技術(shù)考試試題及答案(綜合-必看)
評論
0/150
提交評論