數(shù)據(jù)結(jié)構(gòu)課程設(shè)計之導游程序_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計之導游程序_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計之導游程序_第3頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計之導游程序_第4頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計之導游程序_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

課程設(shè)計的目的和意義《數(shù)據(jù)結(jié)構(gòu)》主要介紹一些最常用的數(shù)據(jù)結(jié)構(gòu),闡明各種數(shù)據(jù)結(jié)構(gòu)內(nèi)在的邏輯關(guān)系,討論其在計算機中的存儲表示,以及在其上進行各種運算時的實現(xiàn)算法,并對算法的效率進行簡單的分析和討論。數(shù)據(jù)結(jié)構(gòu)是介于數(shù)學、計算機軟件和計算機硬件之間的一門計算機專業(yè)的核心課程,它是計算機程序設(shè)計、數(shù)據(jù)庫、操作系統(tǒng)、編譯原理及人工智能等的重要基礎(chǔ),廣泛的應(yīng)用于信息學、系統(tǒng)工程等各種領(lǐng)域。

學習數(shù)據(jù)結(jié)構(gòu)是為了將實際問題中所涉及的對象在計算機中表示出來并對它們進行處理。通過課程設(shè)計可以提高學生的思維能力,促進學生的綜合應(yīng)用能力和專業(yè)素質(zhì)的提高。通過此次課程設(shè)計主要達到以下目的:

(1)了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計方法,具備初步的獨立分析和設(shè)計能力;

(2)初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計、程序編碼、測試等基本方法和技能;

(3)提高綜合運用所學的理論知識和方法獨立分析和解決問題的能力;

(4)訓練用系統(tǒng)的觀點和軟件開發(fā)一般規(guī)范進行軟件開發(fā),培養(yǎng)軟件工作者所應(yīng)具備的科學的工作方法和作風。

(5)鍛煉動手操作能力,培養(yǎng)我們的創(chuàng)新思維能力。從編寫代碼,到調(diào)試程序,再到運行程序,這是設(shè)計的最重要環(huán)節(jié),它需要我們用邏輯思維將我們所學知識和實際相結(jié)合,并在對方案的分析過程中能夠有所創(chuàng)新,從而使運行方案更嚴謹更簡潔。培養(yǎng)好良好的思維,便要將這種思維賦予實踐,即動手操作能力。目前,市場上關(guān)于計算機運用、計算機軟件和電子類相關(guān)專業(yè)的人才輩出,但畢業(yè)生在走進企業(yè)公司政府機構(gòu)或研究單位之后,感覺到缺乏實際開發(fā)設(shè)計項目的經(jīng)驗,所以我們在課程設(shè)計中能夠多訓練,提高我們將知識融會貫通的能力

(6)培養(yǎng)我們嚴謹治學的態(tài)度,以及認清自己學知識、運用知識的能力。

不管是編寫代碼,調(diào)試代碼,還是運行代碼,需要我們嚴謹?shù)乃季S和態(tài)度去對待,這樣才能真正起到此設(shè)計的作用。我們也能夠在設(shè)計中認識到自己對數(shù)據(jù)結(jié)構(gòu)這門課程學習的欠缺,對以后我們的學習有著很大的指導和幫助。

學習課程設(shè)計,編寫程序,將數(shù)據(jù)結(jié)構(gòu)和算法相結(jié)合,了解到數(shù)據(jù)結(jié)構(gòu)、算法和程序之間的關(guān)系,更是學習到數(shù)據(jù)結(jié)構(gòu)和算法的最佳定位攀枝花學院學生課程設(shè)計(論文)需求分析2需求分析2.1需求分析概述當我們參觀校園時,會遇到如下問題:從當前所處位置去校園另外一個位置,要走什么樣的路線距離最短?本課程設(shè)計任務(wù)要求,在給出校園各主要建筑的名稱信息及有路線連通的建筑之間的距離的基礎(chǔ)上,利用校園導游系統(tǒng)計算出給定起點到終點之間距離最近的行進路線。在校園導游程序中,用無向網(wǎng)表示你所在學校的校園景點平面圖,圖中頂點表示主要景點,存放景點的編號、名稱、簡介等信息,圖中的邊表示景點間的道路,存放路徑長度等信息。要求能夠回答有關(guān)景點介紹、游覽路徑等問題。2.2功能需求分析本次課題是校園導游程序的設(shè)計與實現(xiàn)。主要是通過C++語言和數(shù)據(jù)結(jié)構(gòu)算法實現(xiàn),主要有以下功能:查詢各景點的相關(guān)信息;查詢圖中任意兩個景點間的最短路徑。查詢圖中任意兩個景點間的所有路徑。增加、刪除、更新有關(guān)景點和道路的信息。2.3數(shù)據(jù)需求分析根據(jù)系統(tǒng)功能,本系統(tǒng)需要對地圖的信息進行提取。校園導航系統(tǒng)是以數(shù)據(jù)結(jié)構(gòu)當中圖的相關(guān)知識來設(shè)計的系統(tǒng)。將校園景點作為圖的節(jié)點,各個頂點之間的路徑作為圖的邊,邊之間的距離作為節(jié)點間的權(quán)值,抽象成一個無向有權(quán)圖。設(shè)計出能快速找到一個景點到另一個景點的最短路徑及最短距離,幫助人們來更方便的查找各個學校景點,便于參觀。2.4系統(tǒng)功能模塊根據(jù)功能分析,系統(tǒng)功能模塊圖如圖1所示:攀枝花學院學生課程設(shè)計(論文)整體設(shè)計3整體設(shè)計3.1功能結(jié)構(gòu)設(shè)計本系統(tǒng)實現(xiàn)對校園導游程序的設(shè)計,主要包括4個功能模塊,其功能結(jié)構(gòu)如圖所示。3.2數(shù)據(jù)結(jié)構(gòu)設(shè)計//攀枝花學院校園管理系統(tǒng)//2023/6/12#include<stdio.h>#include<stdlib.h>#include<string.h>#defineInfinity65535 //表示無窮大#defineMaxNumber23 //用于鄰接矩陣#definevertex15 //頂點個數(shù)typedefstructside//邊的權(quán)值{ intwet;//權(quán)值}side,wetmatrix[MaxNumber][MaxNumber];//邊的鄰接矩陣類型typedefstructvetinf//頂點信息{ intnumber;//頂點編號 charname[64];//頂點名稱 charintro[256];//頂點介紹}vetinf;typedefstructmapstr//圖結(jié)構(gòu)信息{ vetinfvets[MaxNumber];//頂點數(shù)組 wetmatrixmat;//鄰接矩陣 intvetnum,sidenum;}mapstr;//全局變量mapstrcampus;//圖結(jié)構(gòu)變量(學校校園)intd[30];intvisited[50];intshortest[MaxNumber][MaxNumber];//定義全局變量存儲最小路徑intpathh[MaxNumber][MaxNumber];//定義存儲路徑4功能實現(xiàn)4.1完整程序源代碼//攀枝花學院校園管理系統(tǒng)//2023/6/12#include<stdio.h>#include<stdlib.h>#include<string.h>#defineInfinity65535 //表示無窮大#defineMaxNumber23 //用于鄰接矩陣#definevertex15 //頂點個數(shù)typedefstructside//邊的權(quán)值{ intwet;//權(quán)值}side,wetmatrix[MaxNumber][MaxNumber];//邊的鄰接矩陣類型typedefstructvetinf//頂點信息{ intnumber;//頂點編號 charname[64];//頂點名稱 charintro[256];//頂點介紹}vetinf;typedefstructmapstr//圖結(jié)構(gòu)信息{ vetinfvets[MaxNumber];//頂點數(shù)組 wetmatrixmat;//鄰接矩陣 intvetnum,sidenum;}mapstr;//全局變量mapstrcampus;//圖結(jié)構(gòu)變量(學校校園)intd[30];intvisited[50];intshortest[MaxNumber][MaxNumber];//定義全局變量存儲最小路徑intpathh[MaxNumber][MaxNumber];//定義存儲路徑//1.圖的初始化mapstrinitmap(){ mapstrm;//構(gòu)件圖m inti=0,j=0; m.vetnum=15;//定義頂點個數(shù) m.sidenum=23;//定義邊的條數(shù) for(i=1;i<=vertex;i++)//依次設(shè)置頂點信息 m.vets[i].number=i; //輸入頂點信息 strcpy(m.vets[1].name,"西苑宿舍");strcpy(m.vets[1].intro,"位于學校最西端,學生住宿場所"); strcpy(m.vets[2].name,"西苑餐廳");strcpy(m.vets[2].intro,"為西苑學生提供就餐場所"); strcpy(m.vets[3].name,"公路");strcpy(m.vets[3].intro,"連接東苑與西苑"); strcpy(m.vets[4].name,"會堂");strcpy(m.vets[4].intro,"學校舉辦會議等活動的場所"); strcpy(m.vets[5].name,"田徑場");strcpy(m.vets[5].intro,"學校體育場"); strcpy(m.vets[6].name,"南苑宿舍");strcpy(m.vets[6].intro,"南苑學生住宿場所"); strcpy(m.vets[7].name,"南苑食堂");strcpy(m.vets[7].intro,"有三大食堂,為南苑學生提供就餐場所"); strcpy(m.vets[8].name,"玉蘭園");strcpy(m.vets[8].intro,"在這里可以欣賞到學校的一處優(yōu)美的景色"); strcpy(m.vets[9].name,"靜明湖");strcpy(m.vets[9].intro,"學校的湖,景色優(yōu)美"); strcpy(m.vets[10].name,"籃球場");strcpy(m.vets[10].intro,"位于學校最東端,為學生打球場所"); strcpy(m.vets[11].name,"產(chǎn)教融合大樓");strcpy(m.vets[11].intro,"這里有學校的信息樓,科技樓,化學樓"); strcpy(m.vets[12].name,"圖書館");strcpy(m.vets[12].intro,"這里是學生看書學習的場所"); strcpy(m.vets[13].name,"教學樓");strcpy(m.vets[13].intro,"學生上課學習的場所"); strcpy(m.vets[14].name,"勵志樓");strcpy(m.vets[14].intro,"這里是輔導員所在的辦公樓"); strcpy(m.vets[15].name,"分析測試中心");strcpy(m.vets[15].intro,"剛步入學校南門的大樓,學生上課以及校園網(wǎng)服務(wù)中心"); for(i=1;i<=vertex;i++) for(j=1;j<=vertex;j++) m.mat[i][j].wet=Infinity;//初始化圖的鄰接矩陣 m.mat[1][2].wet=10;m.mat[2][3].wet=40;m.mat[3][4].wet=20;m.mat[3][8].wet=40;m.mat[3][11].wet=30; m.mat[4][5].wet=20;m.mat[4][8].wet=20;m.mat[5][6].wet=30;m.mat[5][8].wet=30;m.mat[6][7].wet=10; m.mat[6][9].wet=70;m.mat[7][9].wet=60;m.mat[7][10].wet=40;m.mat[8][9].wet=45;m.mat[9][10].wet=35; m.mat[9][13].wet=25;m.mat[9][14].wet=30;m.mat[10][14].wet=20;m.mat[11][12].wet=30;m.mat[11][15].wet=50; m.mat[12][13].wet=20;m.mat[12][15].wet=10;m.mat[13][14].wet=40; for(i=1;i<=vertex;i++)//無向帶權(quán)圖是對稱矩陣,給其另一半賦值 for(j=1;j<=vertex;j++) m.mat[j][i].wet=m.mat[i][j].wet; returnm;}//2.查詢景點在圖中的序號intlocatevet(mapstrm,intv){ inti; for(i=0;i<=m.vetnum;i++) if(v==m.vets[i].number)returni;//找到返回頂點i return-1;//未找到}//3.查詢輸入序號l,n間的長度不超過10個景點的路徑voidpath(mapstrm,intl,intn,intk){ ints,t=k+1;intlength=0;//t用于存儲路徑上下一頂點對應(yīng)的d[]數(shù)組元素的下標 if(d[k]==n&&k<8)//若d[k]是終點且景點個數(shù)<8,則輸出該路徑 { for(s=0;s<k;s++) { length=length+m.mat[d[s]][d[s+1]].wet; } if(length<200)//打印路徑小于200(定長)的路徑 { for(s=0;s<k;s++)//輸出該路徑,s=0時為起點m { printf("%d%s>",d[s],m.vets[d[s]].name); } printf("%d%s",d[s],m.vets[d[s]].name);//輸出最后一個頂點 printf("總路線長為%d米\n\n",length); } } else { s=1; while(s<=m.vetnum)//從第m個頂點,訪問所有頂點是否有路徑 { if((m.mat[d[k]][s].wet<Infinity)&&(visited[s]==0))//頂點有邊且未被訪問 { visited[s]=1; d[k+1]=s;//存儲頂點編號 path(m,l,n,t); visited[s]=0;//將找到的路徑上的頂點的訪問標志重新設(shè)置為,便于探究新的路徑 } s++;//試驗下一頂點s開始是否有到終點的路徑; } }}//4.查詢兩景點的所有路徑intallpath(mapstrm){ intk,i,j,l,n; printf("\n\n請輸入您想要查詢的兩個景點的編號:\n\n"); scanf("%d%d",&i,&j);printf("\n\n"); l=locatevet(m,i);//locatevet確定該頂點是否存在。若存在,返回該頂點編號。 n=locatevet(m,j); d[0]=l;//路徑起點l(字母).(d[]數(shù)組為全局變量) for(k=0;k<vertex;k++) visited[k]=0; visited[l]=1; path(m,l,n,0); return1;}//5.迪杰斯特拉算法求單源最短路徑voidshortestpath(mapstrm){ intv0,v,w,k=1,min,t,p; intfinal[MaxNumber];//final[w]=1表示已經(jīng)求得頂點V0到Vw的的最短路徑 intPathside[MaxNumber];//用于存儲最短路徑下標的數(shù)組 intShortPathwet[MaxNumber];//用于存儲到各點最短路徑的權(quán)值和 printf("\n請輸入起始景點的編號:"); scanf("%d",&v0); printf("\n\n"); while(v0<0||v0>vertex)//判斷是否輸入正確 { printf("\n您輸入的景點編號不存在\n"); printf("請重新輸入:"); scanf("%d",&v0); } for(v=1;v<=m.vetnum;v++)//數(shù)組初始化 { final[v]=0;//全部頂點初始化為未找到路徑 ShortPathwet[v]=m.mat[v0][v].wet;//將與v0有連線的路徑加上權(quán)值 Pathside[v]=0;//初始化路徑數(shù)組為0 } ShortPathwet[v0]=0; final[v0]=1; //Dijkstr算法主體 for(v=1;v<=m.vetnum;v++) { min=Infinity; for(w=1;w<=m.vetnum;w++)//找出離當前指向頂點最近的點 { if(!final[w]&&ShortPathwet[w]<min)//未被訪問且存在邊 { k=w; min=ShortPathwet[w]; } } final[k]=1;//將找到的離當前頂點最近的置1 //修正 for(w=1;w<=m.vetnum;w++) { if(!final[w]&&(min+m.mat[k][w].wet<ShortPathwet[w])) { ShortPathwet[w]=min+m.mat[k][w].wet;//修改當前最優(yōu)路徑長度 Pathside[w]=k;//存放前驅(qū)結(jié)點 } } } printf("打印P數(shù)組:"); //打印p數(shù)組 for(t=1;t<=m.vetnum;t++) { printf("%d",Pathside[t]); } printf("\n\n"); printf("打印S數(shù)組:"); //打印s數(shù)組 for(t=1;t<=m.vetnum;t++) { printf("%d",ShortPathwet[t]); } printf("\n\n"); //打印最短路徑 for(t=1;t<=m.vetnum;t++) { p=t; if(t!=v0) { printf("%d%s",t,m.vets[t].name); for(w=1;w<=m.vetnum;w++) { if(Pathside[p]!=0) { printf("<--%d%s",Pathside[p],m.vets[p].name); p=Pathside[p]; } } printf("<--%d%s",v0,m.vets[v0].name); printf("\n總路線長為%d米\n\n",ShortPathwet[t]); } }}//6.主頁voidmenu(){ printf("┌──────────────────────────────────────────────────────┐\n"); printf("│╭═══════════════════════════════════════════════╮|\n"); printf("││*******歡迎使用校園導游系統(tǒng)*******|\n"); printf("│╰═══════════════════════════════════════════════╯│\n"); printf("│歡迎來到攀枝花學院│\n"); printf("│WelcometoPanzhihuaCollege!│\n"); printf("│菜單選擇│\n"); printf(│***************************************************│\n"); printf("│*1.主頁**2.查看游覽路線*│\n"); printf("│***************************************************│\n"); printf("│*3.查詢景點間最短路徑**4.查詢景點間所有路徑*│\n"); printf("│***************************************************│\n"); printf("│*5.學校景點介紹**6.學校地圖*│\n"); printf("│***************************************************│\n"); printf("│*7.更改圖信息**0.退出*│\n"); printf(│***************************************************│\n"); printf("└──────────────────────────────────────────────────────┘\n");}//以下是修改圖的相關(guān)信息。//7.重新構(gòu)造圖intcreatmap(mapstr*m){ inti,j,l,n,v0,v1,distance; printf("請輸入圖的頂點數(shù)和邊數(shù):\n"); scanf("%d%d",&m->vetnum,&m->sidenum); printf("請輸入頂點信息:\n"); for(i=0;i<=m->vetnum;i++)//輸入各頂點對應(yīng)的景點信息 { printf("請輸入景點編號:"); scanf("%d",&m->vets[i].number); printf("請輸入景點名稱:"); scanf("%s",&m->vets[i].name); scanf("請輸入景點簡介:"); scanf("%s",&m->vets[i].intro); } for(i=0;i<=m->vetnum;i++)//權(quán)值初始化為無窮 for(j=0;j<=m->vetnum;j++) m->mat[i][j].wet=Infinity; printf("請輸入圖中各景點邊的信息\n"); for(i=1;i<=m->sidenum;i++) { printf("\n請輸入第%d條邊的起點,終點,長度為:",i); scanf("%d%d%d",&v0,&v1,&distance); l=locatevet(campus,v0); n=locatevet(campus,v1); if(l>0&&n>0) { m->mat[l][n].wet=distance; m->mat[n][l].wet=m->mat[l][n].wet; } } return1;}//8.更改圖部分信息intnewmap(mapstr*m){ intchangenum,i,l,n,t,distance,v0,v1; printf("\n下面請輸入你要修改的景點的個數(shù):\n");//修改定點對應(yīng)的景點 scanf("%d",&changenum); while(changenum<0||changenum>vertex) { printf("\n你的輸入有誤,請重新輸入"); scanf("%d",&changenum); } for(i=0;i<changenum;i++) { printf("\n請輸入景點編號:"); scanf("&d",&l); t=locatevet(campus,l); printf("\n請輸入修改后景點的名稱:"); scanf("%s",&m->vets[t].name); printf("\n請輸入修改后景點的簡介:"); scanf("%s",&m->vets[t].intro); } printf("\n下面請輸入你要修改的邊的個數(shù)"); scanf("%d",&changenum); while(changenum<0||changenum>vertex); { printf("\n你的輸入有誤,請重新輸入"); scanf("%d",&changenum); } if(changenum!=0) printf("\n下面請輸入更新邊的信息:\n"); for(i=1;i<=changenum;i++) { printf("\n修改的第%d條邊的起點終點長度為:",i); scanf("%d%d%d",&v0,&v1,&distance); l=locatevet(campus,v0); n=locatevet(campus,v1); if(l>=0&&n>=0) { m->mat[l][n].wet=distance; m->mat[n][l].wet=m->mat[l][n].wet; } } return1;}//9.增加一條邊intincside(mapstr*m){ intl,n,distance; printf("\n請輸入邊的起點和終點編號,權(quán)值:"); scanf("%d%d%d",&l,&n,&distance); while(l<0||l>m->vetnum||n<0||n>m->vetnum) { printf("輸入錯誤,請重新輸入"); scanf("%d%d",&l,&n); } if(locatevet(campus,l)<0) { printf("此節(jié)點%d已刪除",l); return1; } if(locatevet(campus,n)<0) { printf("此節(jié)點%d已被刪除",n); return1; } m->mat[l][n].wet=distance; m->mat[n][l].wet=m->mat[l][n].wet; m->sidenum++; return1;}//10.增加一個結(jié)點intincvet(mapstr*m){ inti; m->vetnum++;//頂點數(shù)加一 printf("請輸入您要增加結(jié)點的信息:"); printf("\n編號:"); scanf("%d",&m->vets[m->vetnum].number); printf("名稱:"); scanf("%s",&m->vets[m->vetnum].name); printf("簡介:"); scanf("%s",&m->vets[m->vetnum].intro); for(i=1;i<=m->vetnum;i++) { m->mat[m->vetnum][i].wet=Infinity; m->mat[i][m->vetnum].wet=Infinity; } return1;}//11.刪除一個結(jié)點intdelvet(mapstr*m){ inti=0,j,l,v; if(m->vetnum<=0) { printf("圖中已無頂點"); return1; } printf("\n下面請輸入您要刪除的景點編號:"); scanf("%d",&v); while(v<0||v>m->vetnum) { printf("\n輸入錯誤!請重新輸入:"); scanf("%d",&v); } l=locatevet(campus,v); if(l<0) { printf("頂點%d已刪除\n",v); return1; } for(i=l;i<=m->vetnum-1;i++) for(j=1;j<=m->vetnum;j++)//將二維數(shù)組中的第m+1行依次向前移動一行(刪除第m行) m->mat[i][j]=m->mat[i+1][j]; for(i=l;i<=m->vetnum-1;i++) for(j=1;j<=m->vetnum;j++)//將二維數(shù)組中的第m+1列依次向前移動一列(刪除第m列) m->mat[j][i]=m->mat[j][i+1]; m->vets[v].number=-1;//表示此點已刪除,后期打印也不會顯示該點 m->vetnum--;//頂點個數(shù)-1 return1;}//12.刪除一條邊intdelside(mapstr*m){ intl,n,v0,v1; if(m->vetnum<=0) { printf("圖中沒有邊了,無法刪除"); return1; } printf("\n下面請輸入您要刪除的邊的起點和終點編號:"); scanf("%d%d",&v0,&v1); l=locatevet(campus,v0); if('m'<0) { printf("此%d頂點已刪除",v0); return1; } n=locatevet(campus,v1); if(n<0) { printf("此%d頂點已刪除",v1); return1; } m->mat[l][n].wet=Infinity;//將刪掉的邊的權(quán)值改為無窮 m->mat[n][l].wet=Infinity; m->sidenum--;//圖的邊數(shù)減一 return1;}//13.輸出圖的鄰接矩陣的值voidprintmapstr(mapstrm){ inti,j,k=0; for(i=1;i<=vertex;i++) { if(m.vets[i].number!=-1) printf("%6d",i); } printf("\n"); for(i=1;i<=m.vetnum;i++) { for(j=1;j<=m.vetnum;j++) { if(m.mat[i][j].wet==Infinity) printf("****"); else printf("%6d",m.mat[i][j].wet); k++; if(k%m.vetnum==0) printf("\n"); } }}//14.圖的操作主函數(shù)intchangemap(mapstr*m){ intchoice; printf("(1)重新建圖(2)刪除結(jié)點(3)刪除邊\n"); printf("(4)增加結(jié)點(5)增加邊(6)更新信息\n"); printf("(7)輸出鄰接矩陣(8)返回主頁 \n"); do { printf("請輸入你的選擇:"); scanf("%d",&choice); switch(choice) { case1:creatmap(m);break; case2:delvet(m);break; case3:delside(m);break; case4:incvet(m);break; case5:incside(m);break; case6:newmap(m);break; case7:printmapstr(campus);break; case8:system("cls");menu();return1; default:printf("未找到該功能,請輸入有效選項!\n");break; } }while(choice);}//15.用戶登錄intuserlog(){ inti; inta[6]={1,2,3,4,5,6},b[6]; printf("\n請輸入六位密碼(用空格隔開):\n"); for(i=0;i<6;i++) scanf("%d",&b[i]); for(i=0;i<6;i++) { if(a[i]!=b[i]) { printf("密碼錯誤!自動返回主頁面\n"); menu(); return0; } } printf("密碼正確,登陸成功!\n\n"); changemap(&campus);}//16.弗洛伊德算法voidfloyd(mapstrm){ inti,j,k; for(i=1;i<=vertex;i++)//將圖的鄰接矩陣賦值給shortest二維數(shù)組,將矩陣pathh全部初始化為-1 { for(j=1;j<=vertex;j++) { shortest[i][j]=m.mat[i][j].wet; pathh[i][j]=j; } } intii,jj,k1=0; for(ii=1;ii<=vertex;ii++) printf("%6d",ii);//橫著標號1到11 printf("\n"); for(ii=1;ii<=vertex;ii++) { printf("%d",ii); for(jj=1;jj<=vertex;jj++) { printf("%6d",pathh[ii][jj]); k1++; if(k1%vertex==0) printf("\n"); } } printf("\n\n\n"); for(k=1;k<=vertex;k++)//核心操作,完成了以k為中間點對所有的頂點對(i,j)進行檢測和修改 { for(i=1;i<=vertex;i++) { for(j=1;j<=vertex;j++) { if(shortest[i][j]>shortest[i][k]+shortest[k][j]) { shortest[i][j]=shortest[i][k]+shortest[k][j]; pathh[i][j]=pathh[i][k];//記錄一下所走的路//P數(shù)組用來存放前驅(qū)頂點 } } } }//17.輸出數(shù)組voidprintarray(){ inti,j,k=0; for(i=1;i<=vertex;i++) printf("%6d",i);//橫著標號0-11 printf("\n"); for(i=0;i<=vertex;i++) { printf("%d",i);//豎著標號0-11 for(j=1;j<=vertex;j++) { printf("%6d",pathh[i][j]); k++; if(k%vertex==0) printf("\n"); } } printf("\n\n\n");}//18.輸出最短路徑voiddisplay(mapstrm,inti,intj){ inta,b; a=i,b=j; printf("您要查詢的兩景點間最短路徑:\n\n"); printf("%d%s",a,m.vets[a].name); while(pathh[i][j]!=b) { printf("-->%d%s",pathh[i][j],m.vets[pathh[i][j]].name); i=pathh[i][j]; } printf("-->%d%s\n\n",b,m.vets[b].name); printf("%s-->%s的最短路徑是:%d米\n\n",m.vets[a].name,m.vets[b].name,shortest[a][b]);}//19任意兩點間距離(16-19)intshortdistance(mapstrm){ inti,j; printf("請輸入要查詢的兩個景點的數(shù)字編號(用空格隔開)\n"); scanf("%d%d",&i,&j); if(i<0||i>vertex||j<0||j>vertex) { printf("輸入信息有誤!\n\n"); printf("請輸入要查詢的兩個景點的數(shù)字編號(用空格隔開)\n"); scanf("%d%d",&i,&j); } else { floyd(m); printarray(); display(m,i,j); } return1;}//20顯示所有景點信息voidcompusinfor(mapstrm){ inti; printf("\n\n編號景點名稱簡介\n"); printf("*************************************************************************\n"); for(i=1;i<=vertex;i++) { if(m.vets[i].number!=-1) printf("%-10d%-25s%-70s\n",m.vets[i].number,m.vets[i].name,m.vets[i].intro); } printf("*************************************************************************\n");}voidschoolmap(){ printf("攀枝花學院地圖\n"); printf("````````````````````````````````````````````南苑``````````````````````````````````````````\n"); printf("````````````````````````````````````````````宿舍``````````````````````````````````````````\n"); printf("````````````````````````````````````````````````````````````````````````````南苑``````````\n"); printf("````````````````````````````````````````````````````````````````````````````食堂``````````\n"); printf("```````````````````````````````田徑場`````````````````````````````````````````````````````\n"); printf("``````````````````````````````````````````````````````````````````````````````````````````\n"); printf("````````````````````````````````````````````玉蘭園``````````````````````籃球場``````````\n"); printf("``````````````````````會堂``````````````````````````````````````````````````````````````\n"); printf("``````````````````````````````````````````````````````````````````````````````````````````\n"); printf("``````````````````````````````````````````````````````````````````````````````````````````\n"); printf("西苑`西苑```公路````````````````````````````````````````````````````````````````````\n"); printf("宿舍`餐廳`````````````````````````````````````````````````````````````````````````````\n"); printf("```````````````````````````````````````````````````````````````````````````教學樓````````\n"); printf("``````````````產(chǎn)教``````````````````````````````````````````````````````````````````````\n"); printf("``````````````融合```````````靜明湖`````圖書館````勵志樓````````````````````````\n"); printf("``````````````大樓````````````````````````````````````````````````````````````````\n"); printf("``````````````````````````````````````````````````````````````````````````````````````````\n"); printf("`````````````````````````````````````````分析測試中心```````````````````````````````````````````\n"); printf("\n\n"); printf("\n 西<|>東\n");}//22用戶界面voidmainwork(){ menu(); intchoice; campus=initmap(); do { printf("請輸入你的選擇:"); scanf("%d",&choice); switch(choice) { case1:system("cls");menu();

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論