校園導(dǎo)游系統(tǒng)的設(shè)計與實現(xiàn)_第1頁
校園導(dǎo)游系統(tǒng)的設(shè)計與實現(xiàn)_第2頁
校園導(dǎo)游系統(tǒng)的設(shè)計與實現(xiàn)_第3頁
校園導(dǎo)游系統(tǒng)的設(shè)計與實現(xiàn)_第4頁
校園導(dǎo)游系統(tǒng)的設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

數(shù)據(jù)構(gòu)造課程設(shè)計報告校園導(dǎo)游系統(tǒng)的設(shè)計與實現(xiàn)目錄TOC\o"1-5"\h\z\u1設(shè)計規(guī)定 12概要設(shè)計 12.1主界面設(shè)計 12.2存儲構(gòu)造設(shè)計 22.3系統(tǒng)功效設(shè)計 23模塊設(shè)計 23.1模塊設(shè)計 23.3函數(shù)重要調(diào)用關(guān)系圖 44具體設(shè)計 44.1數(shù)據(jù)類型定義 44.2系統(tǒng)重要子程序具體設(shè)計 55測試分析 116源程序清單 137顧客手冊 278設(shè)計心得體會 27校園導(dǎo)游系統(tǒng)的設(shè)計與實現(xiàn)1設(shè)計規(guī)定1.問題描述設(shè)計一種校園導(dǎo)游程序,為來訪的客人提供信息查詢服務(wù)。2.需求分析(1)設(shè)計學(xué)校的校園平面圖。選用若干個有代表性的景點抽象成一種無向帶權(quán)圖(無向網(wǎng)),以圖中頂點表達校內(nèi)各景點,邊上的權(quán)值表達兩景點之間的距離。(2)寄存景點代號、名稱、介紹等信息供顧客查詢。(3)為來訪客人提供圖中任意景點有關(guān)信息的查詢。(4)為來訪客人提供圖中任意景點之間的問路查詢。(5)可覺得校園平面圖增加或刪除景點或邊,修改邊上的權(quán)值等。2概要設(shè)計為了實現(xiàn)以上功效能夠從三個方面著手設(shè)計。2.1主界面設(shè)計為了實現(xiàn)校園導(dǎo)游系統(tǒng)各功效的管理。首先設(shè)計一種含有多個菜單選項的主控菜單子程序以鏈接系統(tǒng)的各項子功效,方便顧客使用本系統(tǒng)主控菜單運行界面如圖1-1。圖1-1校園導(dǎo)游系統(tǒng)主界面2.2存儲構(gòu)造設(shè)計本系統(tǒng)采用圖構(gòu)造類型(mgraph)存儲抽象校園圖的信息。其中,各景點間的鄰接關(guān)系用圖的鄰接矩陣類型(adjmatrix)存儲;景點(頂點)信息用構(gòu)造數(shù)組(vexs)存儲,其中每個數(shù)組元素是一種構(gòu)造變量,包含景點編號、景點名稱及景點介紹三個分量;圖的頂點個數(shù)及邊的個數(shù)由分量vexnum、arcnum表達,它們是整型數(shù)據(jù)。另外,本系統(tǒng)還設(shè)立了三個全局變量:visited[]數(shù)組用于存儲頂點與否被訪問標(biāo)志;d[]數(shù)組用于寄存邊上權(quán)值或存儲查找途徑頂點的編號;c是一種圖構(gòu)造的全局變量。2.3系統(tǒng)功效設(shè)計本系統(tǒng)除了要完畢圖的初始化功效外還設(shè)立了4個子功效菜單。圖的初始化右函數(shù)Chushihua()實現(xiàn)。根據(jù)讀入的圖的頂點個數(shù)和邊的個數(shù),分別初始化圖構(gòu)造中圖的頂點向量數(shù)組和圖的鄰接矩陣。4個子功效的設(shè)計描述以下。景點列表景點列表由函數(shù)Viewlist()實現(xiàn)。當(dāng)顧客選擇該功效,系統(tǒng)即能輸入學(xué)校全部景點的信息:涉及景點編號、景點名稱及景點介紹。路線導(dǎo)航路線導(dǎo)航由函數(shù)Guide()實現(xiàn),該功效采用弗洛伊德(Floyd)和迪杰斯特拉(Dijkstra)算法實現(xiàn)。當(dāng)顧客選擇該功效,系統(tǒng)能根據(jù)顧客輸入的起始景點編號和目的景點編號,求出從該景點到其它景點的最短途徑線路及距離,和其它包含7個景點以內(nèi)的可行途徑。更改地圖更改圖的信息功效由主調(diào)函數(shù)Changegraph()及若干子函數(shù)完畢,能夠?qū)崿F(xiàn)圖的若干基本操作。如增加新的景點、刪除邊、修改景點介紹等。退出即退出校園導(dǎo)游系統(tǒng),由函數(shù)Exit()實現(xiàn)。3模塊設(shè)計3.1模塊設(shè)計本程序包含3個模塊:主程序模塊、工作區(qū)模塊和無向網(wǎng)操作模塊。其調(diào)用關(guān)系如圖1-2所示。圖1-2抽象的鹽城工學(xué)院南校區(qū)無向帶權(quán)圖3.2系統(tǒng)子程序及功效設(shè)計本系統(tǒng)共設(shè)立17個子程序,各子程序的函數(shù)名及功效闡明以下。(1)voidChushihua();//圖的初始化(2)voidWaitting(long);//被(3)調(diào)用,擬定等待時間(3)voidLoading(char);//頁面間的加載界面(4)voidViewlist();//景點列表(5)voidIndex();//主界面(6)voidExit();//推出(7)voidGuide();//景點導(dǎo)航(8)voidShortestPath(inta,intb);//用Dijktra算法,求最短途徑(9)voidAllpath(inta,intb);//查詢?nèi)靠尚型緩剑?0)voidpath(inta,intb,intk);被(9)調(diào)用,打印兩景點間的景點個數(shù)不大于6的全部途徑(11)intChangegraph();//圖操作的主調(diào)函數(shù)(12)voiddelvex();//刪除景點(13)intdelarc();//刪除途徑(14)intenvex();//增加景點(15)intenarc();//增加途徑(16)intnewgraph();//更新介紹(17)voidmain();//主函數(shù)3.3函數(shù)重要調(diào)用關(guān)系圖校園導(dǎo)游系統(tǒng)17個子程序之間的重要調(diào)用關(guān)系如圖1-3所示。圖1-3系統(tǒng)函數(shù)調(diào)用關(guān)系圖4具體設(shè)計各部分功效的實當(dāng)代碼。4.1數(shù)據(jù)類型定義(1)無向帶權(quán)圖(無向網(wǎng))的定義typedefstructside//邊的信息{intadj;//邊的權(quán)值,adjmatrix[MaxVertexNum][MaxVertexNum]}side,adjmatrix[MaxVertexNum][MaxVertexNum];//鄰接矩陣typedefstructvertex//頂點信息{intnumber;//景點編號charname[32];//景點名稱charintroduction[256];//景點介紹}vertex;typedefstructpicture//圖{vertexvexs[MaxVertexNum];//頂點向量(數(shù)組)adjmatrixarcs;//鄰接矩陣intvexnum,arcnum;//頂點個數(shù)邊的個輸}picture;(2)全局變量定義picturec;//圖(大學(xué)校園)intvisited[15],d[15];//判斷頂點與否被訪問過4.2系統(tǒng)重要子程序具體設(shè)計(1)主函數(shù)模塊設(shè)計intmain(){Chushihua();Index();return0;}(2)顧客工作區(qū)模塊設(shè)計voidIndex(){intchoice;printf("\n\n\n\t\t\t****************************歡迎使用校園導(dǎo)游程序****************************\n");printf("\t\t\t**\n");printf("\t\t\t*鹽城工學(xué)院歡迎您!*\n");printf("\t\t\t**\n");printf("\t\t\t**\n");printf("\t\t\t*服務(wù)列表:*\n");printf("\t\t\t**\n");printf("\t\t\t*1.景點列表2.路線導(dǎo)航*\n");printf("\t\t\t**\n");printf("\t\t\t*3.更改地圖4.退出系統(tǒng)*\n");printf("\t\t\t**\n");printf("\t\t\t**\n");printf("\t\t\t**\n");printf("\t\t\t****************************************************************************\n");printf("\n\n\t\t\t請選擇服務(wù):");scanf("%d",&choice);while(!(choice==1||choice==2||choice==3||choice==4)){printf("\n\t\t\t輸入信息錯誤,請重新輸入:");scanf("%d",&choice);}while(1){switch(choice){case1:Viewlist();break;case2:Guide();break;case3:Changegraph();break;case4:Exit();break;default:break;}}}(3)無向網(wǎng)操作主調(diào)模塊設(shè)計intChangegraph(){ Loading("更改地圖界面"); intyourchoice; printf("\n\n\n\t\t\t****************************************************************************\n");printf("\t\t\t**\n");printf("\t\t\t*服務(wù)選項:*\n");printf("\t\t\t**\n");printf("\t\t\t*1.刪除景點2.增加景點*\n");printf("\t\t\t**\n");printf("\t\t\t*3.刪除途徑4.增加途徑*\n");printf("\t\t\t**\n");printf("\t\t\t*5.更新信息6.返回主頁*\n");printf("\t\t\t**\n");printf("\t\t\t**\n");printf("\t\t\t**\n");printf("\t\t\t****************************************************************************\n");printf("\n\n\t\t\t請選擇服務(wù):"); scanf("%d",&yourchoice);printf("\n\n"); while(!(yourchoice==1||yourchoice==2||yourchoice==3||yourchoice==4||yourchoice==5||yourchoice==6)) { printf("\n\t\t\t輸入信息錯誤,請重新輸入:");scanf("%d",&yourchoice); } while(1) { switch(yourchoice) { case1:delvex(); break; case3: delarc(); break; case2: envex(); break; case4: enarc(); break; case5:newgraph(); break; case6: Loading("主頁");Index(); } }}(4)求兩景點間途徑voidGuide(){inta,b;Loading("導(dǎo)航界面");printf("\n\n\t\t\t****************************************************************************\n");printf("\n\t\t\t請輸入您現(xiàn)在位置的代號:");scanf("%d",&a);while(!(a>=0&&a<c.vexnum)){printf("\n\t\t\t輸入信息錯誤,請重新輸入:");scanf("%d",&a);}printf("\n\t\t\t請輸入您目的位置的代號:");scanf("%d",&b);while(!(b>=0&&b<c.vexnum)){printf("\n\t\t\t輸入信息錯誤,請重新輸入:");scanf("%d",&b);}printf("\n\n\n\t\t\t\t\t正在查詢路線\t");for(inti=0;i<5;i++){Waitting(60000000);printf(".");}system("cls");ShortestPath(a,b);Allpath(a,b);printf("\t\t\t****************************************************************************\n");printf("\n\n\t\t\t回車鍵鍵返回主菜單...");getchar();getchar();Loading("主頁");Index();}(5)用Dijkstra算法,求一種景點到其它景點間的最短途徑并打印voidShortestPath(inta,intb){inti,v,u,w,d[15][15],p[15][15][15];//v0為起始點for(v=0;v<c.vexnum;v++){for(w=0;w<c.vexnum;w++){d[v][w]=c.arcs[v][w].adj;for(u=0;u<c.vexnum;u++)p[v][w][u]=0;if(d[v][w]<Null){p[v][w][v]=1;p[v][w][w]=1;}}}for(u=0;u<c.vexnum;u++){for(v=0;v<c.vexnum;v++)for(w=0;w<c.vexnum;w++)if(d[v][u]+d[u][v]<d[v][w]){d[v][w]=d[v][u]+d[u][w];for(i=0;i<c.vexnum;i++)p[v][w][i]=p[v][u][i]||p[u][w][i];}}printf("\n\n\t\t\t****************************************************************************\n");printf("\n\t\t\t最短途徑為:");printf("%s",c.vexs[a].name);for(u=0;u<c.vexnum;u++)if(p[a][b][u]&&a!=u&&b!=u){printf(">%s",c.vexs[u].name);}printf(">%s",c.vexs[b].name);printf("\n\t\t\t路程總長為%d米\n\n",d[a][b]);printf("\t\t\t****************************************************************************\n");printf("\n\t\t\t其它可供選擇途徑為:\n\n");}(6)求兩景點間的全部全部途徑voidAllpath(inta,intb){intk,i,j,m,n;d[0]=a;//存儲途徑起點m(intd[]數(shù)組是全局變量)for(k=0;k<c.vexnum;k++)//全部頂點訪問標(biāo)志初值設(shè)為0visited[k]=0;visited[a]=1;//第m個頂點訪問標(biāo)志設(shè)立為1path(a,b,0);//調(diào)用(3)。k=0,對應(yīng)起點d[0]==a。k為d[]數(shù)組下標(biāo)}voidpath(inta,intb,intk){ints,x=0; intt=k+1;//t記載途徑上下一種中間頂點在d[]數(shù)組中的下標(biāo) if(d[k]==b&&k<6)//d[k]存儲途徑頂點。若d[k]是終點n且景點個數(shù)<=8,則輸出該途徑 { printf("\t\t\t");//遞歸出口,找到一條途徑for(s=0;s<k;s++) printf("%s>",c.vexs[d[s]].name);//輸出該途徑。s=0時為起點mprintf("%s",c.vexs[d[s]].name);//輸出最后一種景點名(即頂點n的名字,此時s==k)printf("\n\n");}else { s=0;while(s<c.vexnum)//從第m個頂點,試探至全部頂點與否有途徑 { if((c.arcs[d[k]][s].adj<Null)&&(visited[s]==0))//初態(tài):頂點m到頂點s有邊,且未被訪問 { visited[s]=1; d[k+1]=s;//存儲頂點編號s至d[k+1]中 path(a,b,t);//求從下標(biāo)為t=k+1的第d[t]個頂點開始的途徑(遞歸調(diào)用),同時打印出一條m至n的途徑 visited[s]=0;//將找到的途徑上頂點的訪問標(biāo)志重新設(shè)立為0,以用于試探新的途徑 } s++;//試探從下一種頂點s開始與否有到終點的途徑 } }}5測試分析系統(tǒng)運行主界面如圖1-1所示,各子功效測試運行成果以下。1.景點列表在主菜單下,顧客輸入1并回車,運行成果如圖1-4所示。圖1-4鹽城工學(xué)院南校區(qū)景點名稱及介紹2.路線導(dǎo)航在主菜單下,顧客輸入2并回車,按提示輸入地點代碼如1和6,運行成果如圖1-5所示。圖1-5輸入界面等待動態(tài)加載結(jié)束,頁面跳轉(zhuǎn),運行成果如圖1-6所示。圖1-6任意兩個景點之間的最短瀏覽途徑和全部可行途徑3.更改地圖在主菜單下,顧客輸入3并回車后出現(xiàn)二級菜單界面,運行成果如圖1-7所示,再進一步做出選擇,能夠?qū)崿F(xiàn)圖的有關(guān)基本操作。圖1-8更改地圖4.退出系統(tǒng)在主菜單下,顧客輸入4并回車,即可退出校園導(dǎo)游系統(tǒng),運行成果如圖1-9所示。圖1-8退出界面6源程序清單#include<stdio.h>#include<stdlib.h>#include<string.h>#include<cstring>#defineNull1000#defineMaxVertexNum20#defineMax40voidChushihua();voidWaitting(long);voidLoading(char);voidViewlist();voidIndex();voidExit();voidGuide();voidShortestPath(inta,intb);voidAllpath(inta,intb);voidpath(inta,intb,intk);intChangegraph();voiddelvex();intdelarc();intenvex();intenarc();intnewgraph();typedefstructside//邊的信息{intadj;//邊的權(quán)值,adjmatrix[MaxVertexNum][MaxVertexNum]}side,adjmatrix[MaxVertexNum][MaxVertexNum];//鄰接矩陣typedefstructvertex//頂點信息{intnumber;//景點編號charname[32];//景點名稱charintroduction[256];//景點介紹}vertex;typedefstructpicture//圖{vertexvexs[MaxVertexNum];//頂點向量(數(shù)組)adjmatrixarcs;//鄰接矩陣intvexnum,arcnum;//頂點個數(shù)邊的個輸}picture;picturec;intvisited[15],d[15];voidChushihua()//初始化圖{inti=0,j=0;//picturec;c.vexnum=15;//頂點個數(shù)c.arcnum=23;//邊的個數(shù)for(i=0;i<c.vexnum;i++)c.vexs[i].number=i;strcpy(c.vexs[0].name,"北門");strcpy(c.vexs[0].introduction,"位于青年路");strcpy(c.vexs[1].name,"一期食堂");strcpy(c.vexs[1].introduction,"一期餐廳,共三層,食品種類豐富");strcpy(c.vexs[2].name,"活動中心");strcpy(c.vexs[2].introduction,"衛(wèi)生所、大學(xué)生活動中心所在地");strcpy(c.vexs[3].name,"一期宿舍");strcpy(c.vexs[3].introduction,"1—20棟宿舍樓,共五個大院");strcpy(c.vexs[4].name,"東操場");strcpy(c.vexs[4].introduction,"涉及籃球場、足球場、網(wǎng)球場,為主操場");strcpy(c.vexs[5].name,"二期食堂");strcpy(c.vexs[5].introduction,"共兩層,二樓另設(shè)名族餐廳");strcpy(c.vexs[6].name,"博學(xué)樓");strcpy(c.vexs[6].introduction,"重要教學(xué)樓,涉及教室、實驗機房");strcpy(c.vexs[7].name,"二期宿舍");strcpy(c.vexs[7].introduction,"21-30棟宿舍樓,共三個大院");strcpy(c.vexs[8].name,"仁和樓");strcpy(c.vexs[8].introduction,"經(jīng)管學(xué)院學(xué)院樓");strcpy(c.vexs[9].name,"潤美樓");strcpy(c.vexs[9].introduction,"設(shè)藝學(xué)院學(xué)院樓");strcpy(c.vexs[10].name,"土木館");strcpy(c.vexs[10].introduction,"土木學(xué)院學(xué)院樓");strcpy(c.vexs[11].name,"機械管");strcpy(c.vexs[11].introduction,"機械學(xué)院學(xué)院樓");strcpy(c.vexs[12].name,"圖書館");strcpy(c.vexs[12].introduction,"學(xué)校圖書館,館藏豐富");strcpy(c.vexs[13].name,"懷德樓");strcpy(c.vexs[13].introduction,"重要教師辦公樓");strcpy(c.vexs[14].name,"東門");strcpy(c.vexs[14].introduction,"位于但愿大道");for(i=0;i<c.vexnum;i++) for(j=0;j<c.vexnum;j++) c.arcs[i][j].adj=Null;//初始化各個邊為1000,表達兩個景點之間不可達 c.arcs[0][1].adj=c.arcs[1][0].adj=100; c.arcs[0][2].adj=c.arcs[2][0].adj=140; c.arcs[1][2].adj=c.arcs[2][1].adj=80; c.arcs[2][5].adj=c.arcs[5][2].adj=190; c.arcs[1][3].adj=c.arcs[3][1].adj=100; c.arcs[3][4].adj=c.arcs[4][3].adj=130; c.arcs[3][6].adj=c.arcs[6][3].adj=80; c.arcs[4][9].adj=c.arcs[9][4].adj=120; c.arcs[5][6].adj=c.arcs[6][5].adj=160; c.arcs[5][7].adj=c.arcs[7][5].adj=60; c.arcs[6][10].adj=c.arcs[10][6].adj=140; c.arcs[6][12].adj=c.arcs[12][6].adj=100; c.arcs[6][8].adj=c.arcs[8][6].adj=90; c.arcs[7][10].adj=c.arcs[10][7].adj=120; c.arcs[8][9].adj=c.arcs[9][8].adj=50; c.arcs[8][12].adj=c.arcs[12][8].adj=110; c.arcs[9][13].adj=c.arcs[13][9].adj=100; c.arcs[9][14].adj=c.arcs[14][9].adj=120; c.arcs[10][12].adj=c.arcs[12][10].adj=70; c.arcs[10][11].adj=c.arcs[11][10].adj=50; c.arcs[11][12].adj=c.arcs[12][11].adj=70; c.arcs[12][13].adj=c.arcs[13][12].adj=130; c.arcs[13][14].adj=c.arcs[14][13].adj=90;}intmain(){Chushihua();Index();return0;}voidIndex(){intchoice;printf("\n\n\n\t\t\t****************************歡迎使用校園導(dǎo)游程序****************************\n");printf("\t\t\t**\n");printf("\t\t\t*鹽城工學(xué)院歡迎您!*\n");printf("\t\t\t**\n");printf("\t\t\t**\n");printf("\t\t\t*服務(wù)列表:*\n");printf("\t\t\t**\n");printf("\t\t\t*1.景點列表2.路線導(dǎo)航*\n");printf("\t\t\t**\n");printf("\t\t\t*3.更改地圖4.退出系統(tǒng)*\n");printf("\t\t\t**\n");printf("\t\t\t**\n");printf("\t\t\t**\n");printf("\t\t\t****************************************************************************\n");printf("\n\n\t\t\t請選擇服務(wù):");scanf("%d",&choice);while(!(choice==1||choice==2||choice==3||choice==4)){printf("\n\t\t\t輸入信息錯誤,請重新輸入:");scanf("%d",&choice);}while(1){switch(choice){case1:Viewlist();break;case2:Guide();break;case3:Changegraph();break;case4:Exit();break;default:break;}}}voidWaitting(longtime){inti,j;for(i=0;i<2;i++)for(j=0;j<time;j++);}voidLoading(charweizhi[10]){system("cls");printf("\n\n\n\t\t\t\t\t%s正在加載\t",weizhi);for(inti=0;i<5;i++){Waitting(30000000);printf(".");}system("cls");}voidViewlist(){Loading("景點列表");inti;printf("\n\n\t\t\t****************************************************************************\n");printf("\t\t\t*編號景點名稱介紹*\n");printf("\t\t\t****************************************************************************\n");printf("\t\t\t**\n");for(i=0;i<c.vexnum;i++)printf("\t\t\t*%-10d%-20s%-42s*\n",c.vexs[i].number,c.vexs[i].name,c.vexs[i].introduction);printf("\t\t\t**\n");printf("\t\t\t****************************************************************************\n");printf("\n\n\t\t\t回車鍵返回主菜單...");getchar();getchar();Loading("主頁");Index();}voidExit(){system("cls");printf("\n\n\n\t\t\t\t\t正在退出\t");for(inti=0;i<5;i++){Waitting(30000000);printf(".");}system("cls");printf("\n\n\n\t\t\t\t\t************************************\n");printf("\t\t\t\t\t**\n");printf("\t\t\t\t\t*感謝您的使用!再會!*\n");printf("\t\t\t\t\t**\n");printf("\t\t\t\t\t************************************\n\n\n");exit(0);}voidGuide(){inta,b;Loading("導(dǎo)航界面");printf("\n\n\t\t\t****************************************************************************\n");printf("\n\t\t\t請輸入您現(xiàn)在位置的代號:");scanf("%d",&a);while(!(a>=0&&a<c.vexnum)){printf("\n\t\t\t輸入信息錯誤,請重新輸入:");scanf("%d",&a);}printf("\n\t\t\t請輸入您目的位置的代號:");scanf("%d",&b);while(!(b>=0&&b<c.vexnum)){printf("\n\t\t\t輸入信息錯誤,請重新輸入:");scanf("%d",&b);}printf("\n\n\n\t\t\t\t\t正在查詢路線\t");for(inti=0;i<5;i++){Waitting(60000000);printf(".");}system("cls");ShortestPath(a,b);Allpath(a,b);printf("\t\t\t****************************************************************************\n");printf("\n\n\t\t\t回車鍵鍵返回主菜單...");getchar();getchar();Loading("主頁");Index();}voidShortestPath(inta,intb){inti,v,u,w,d[15][15],p[15][15][15];//v0為起始點for(v=0;v<c.vexnum;v++){for(w=0;w<c.vexnum;w++){d[v][w]=c.arcs[v][w].adj;for(u=0;u<c.vexnum;u++)p[v][w][u]=0;if(d[v][w]<Null){p[v][w][v]=1;p[v][w][w]=1;}}}for(u=0;u<c.vexnum;u++){for(v=0;v<c.vexnum;v++)for(w=0;w<c.vexnum;w++)if(d[v][u]+d[u][v]<d[v][w]){d[v][w]=d[v][u]+d[u][w];for(i=0;i<c.vexnum;i++)p[v][w][i]=p[v][u][i]||p[u][w][i];}}printf("\n\n\t\t\t****************************************************************************\n");printf("\n\t\t\t最短途徑為:");printf("%s",c.vexs[a].name);for(u=0;u<c.vexnum;u++)if(p[a][b][u]&&a!=u&&b!=u){printf(">%s",c.vexs[u].name);}printf(">%s",c.vexs[b].name);printf("\n\t\t\t路程總長為%d米\n\n",d[a][b]);printf("\t\t\t****************************************************************************\n");printf("\n\t\t\t其它可供選擇途徑為:\n\n");}voidAllpath(inta,intb){intk,i,j,m,n;d[0]=a;//存儲途徑起點m(intd[]數(shù)組是全局變量)for(k=0;k<c.vexnum;k++)//全部頂點訪問標(biāo)志初值設(shè)為0visited[k]=0;visited[a]=1;//第m個頂點訪問標(biāo)志設(shè)立為1path(a,b,0);//調(diào)用(3)。k=0,對應(yīng)起點d[0]==a。k為d[]數(shù)組下標(biāo)}voidpath(inta,intb,intk){ints,x=0; intt=k+1;//t記載途徑上下一種中間頂點在d[]數(shù)組中的下標(biāo) if(d[k]==b&&k<6)//d[k]存儲途徑頂點。若d[k]是終點n且景點個數(shù)<=8,則輸出該途徑 { printf("\t\t\t");//遞歸出口,找到一條途徑for(s=0;s<k;s++) printf("%s>",c.vexs[d[s]].name);//輸出該途徑。s=0時為起點mprintf("%s",c.vexs[d[s]].name);//輸出最后一種景點名(即頂點n的名字,此時s==k)printf("\n\n");}else { s=0;while(s<c.vexnum)//從第m個頂點,試探至全部頂點與否有途徑 { if((c.arcs[d[k]][s].adj<Null)&&(visited[s]==0))//初態(tài):頂點m到頂點s有邊,且未被訪問 { visited[s]=1; d[k+1]=s;//存儲頂點編號s至d[k+1]中 path(a,b,t);//求從下標(biāo)為t=k+1的第d[t]個頂點開始的途徑(遞歸調(diào)用),同時打印出一條m至n的途徑 visited[s]=0;//將找到的途徑上頂點的訪問標(biāo)志重新設(shè)立為0,以用于試探新的途徑 } s++;//試探從下一種頂點s開始與否有到終點的途徑 } }}intChangegraph(){ Loading("更改地圖界面"); intyourchoice; printf("\n\n\n\t\t\t****************************************************************************\n");printf("\t\t\t**\n");printf("\t\t\t*服務(wù)選項:*\n");printf("\t\t\t**\n");printf("\t\t\t*1.刪除景點2.增加景點*\n");printf("\t\t\t**\n");printf("\t\t\t*3.刪除途徑4.增加途徑*\n");printf("\t\t\t**\n");printf("\t\t\t*5.更新信息6.返回主頁*\n");printf("\t\t\t**\n");printf("\t\t\t**\n");printf("\t\t\t**\n");printf("\t\t\t****************************************************************************\n");printf("\n\n\t\t\t請選擇服務(wù):"); scanf("%d",&yourchoice);printf("\n\n"); while(!(yourchoice==1||yourchoice==2||yourchoice==3||yourchoice==4||yourchoice==5||yourchoice==6)) { printf("\n\t\t\t輸入信息錯誤,請重新輸入:");scanf("%d",&yourchoice); } while(1) { switch(yourchoice) { case1:delvex(); break; case3: delarc(); break; case2: envex(); break; case4: enarc(); break; case5:newgraph(); break; case6: Loading("主頁");Index(); } }}voiddelvex(){inti=0,j;intm;intv;system("cls");printf("\n\n\t\t\t****************************************************************************\n");if(c.vexnum<=0){printf("\n\t\t\t\t圖中已無頂點\n");}printf("\n\t\t\t\t請輸入你要刪除的景點編號:");scanf("%d",&v);while(v<0||v>c.vexnum){printf("\n\t\t\t\t輸入錯誤!請重新輸入:");scanf("%d",&v);}printf("\n\t\t\t\t頂點%d已刪除\n\n\n",v);for(i=v;i<c.vexnum-1;i++)//對頂點信息所在次序表進行刪除m點的操作{strcpy(c.vexs[i].name,c.vexs[i+1].name);strcpy(c.vexs[i].introduction,c.vexs[i+1].introduction);}//對原鄰接矩陣,刪除該頂點到其它頂點的鄰接關(guān)系。分別刪除對應(yīng)的行和列for(i=m;i<c.vexnum-1;i++)//行for(j=0;j<c.vexnum;j++)//列c.arcs[i][j]=c.arcs[i+1][j];//二維數(shù)組,從第m+1行開始依次往前移一行。即刪除第m行for(i=m;i<c.vexnum-1;i++)for(j=0;j<c.vexnum;j++)c.arcs[j][i]=c.arcs[j][i+1];//二維數(shù)組,從第m+1列開始依次往前移一列。即刪除第m列c.vexnum--;printf("\n\n\t\t\t回車鍵返回主菜單...");getchar();getchar();Loading("主頁");Index();}intdelarc(){ intm,n; intv0,v1; system("cls");printf("\n\n\t\t\t****************************************************************************\n"); if(c.arcnum<=0) { printf("\n\t\t\t\t圖中已無邊,無法刪除。"); return1; } printf("\n\t\t\t\t請輸入你要刪除的邊的起點和終點編號:"); scanf("%d%d",&v0,&v1); while(v0<0||v0>c.vexnum||v1<0||v1>c.vexnum){printf("\n\t\t\t\t

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論