![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告[共39頁(yè)]_第1頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-6/13/f52c411d-4294-4eec-b8cf-e0476d848079/f52c411d-4294-4eec-b8cf-e0476d8480791.gif)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告[共39頁(yè)]_第2頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-6/13/f52c411d-4294-4eec-b8cf-e0476d848079/f52c411d-4294-4eec-b8cf-e0476d8480792.gif)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告[共39頁(yè)]_第3頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-6/13/f52c411d-4294-4eec-b8cf-e0476d848079/f52c411d-4294-4eec-b8cf-e0476d8480793.gif)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告[共39頁(yè)]_第4頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-6/13/f52c411d-4294-4eec-b8cf-e0476d848079/f52c411d-4294-4eec-b8cf-e0476d8480794.gif)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告[共39頁(yè)]_第5頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-6/13/f52c411d-4294-4eec-b8cf-e0476d848079/f52c411d-4294-4eec-b8cf-e0476d8480795.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、洛 陽(yáng) 理 工 學(xué) 院課 程 設(shè) 計(jì) 說(shuō) 明 書(shū)課程名稱 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 設(shè)計(jì)課題 校園導(dǎo)游程序 專 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) 班 級(jí) 學(xué) 號(hào) 姓 名 完成日期 課 程 設(shè) 計(jì) 任 務(wù) 書(shū)設(shè)計(jì)題目: 校園導(dǎo)游程序 設(shè)計(jì)內(nèi)容與要求:?jiǎn)栴}描述用無(wú)向網(wǎng)表示你所在學(xué)校的校園景點(diǎn)平面圖,圖中頂點(diǎn)表示主要景點(diǎn),存放景點(diǎn)的編號(hào)、名稱、簡(jiǎn)介等信息,圖中的邊表示景點(diǎn)間的道路,存放路徑長(zhǎng)度等信息。要求能夠回答有關(guān)景點(diǎn)介紹、游覽路徑等問(wèn)題?;疽?(1) 查詢各景點(diǎn)的相關(guān)信息;(2) 查詢圖中任意兩個(gè)景點(diǎn)間的最短路徑。(3) 查詢圖中任意兩個(gè)景點(diǎn)間的所有路徑。(4) 增加、刪除、更新有關(guān)景點(diǎn)和道路的信息。 指導(dǎo)教師
2、: 2016 年 12 月 20 日課 程 設(shè) 計(jì) 評(píng) 語(yǔ) 成績(jī): 指導(dǎo)教師:_ 年 月 日目錄一、問(wèn)題描述1二、 基本要求1三、 測(cè)試數(shù)據(jù)2四、算法思想3五、 模塊劃分45.1應(yīng)用函數(shù)45.2.1主函數(shù)55.2.2查詢景點(diǎn)信息函數(shù)65.2.3查詢兩景點(diǎn)之間最短路徑函數(shù)65.2.4查詢兩景點(diǎn)之間所有路徑函數(shù)75.2.6刪除已有的頂點(diǎn)和路徑85.2.7修改已有的頂點(diǎn)和路徑9六、 數(shù)據(jù)結(jié)構(gòu)10七、 測(cè)試11八、 心得19九、 源程序20一、 問(wèn)題描述用無(wú)向網(wǎng)表示你所在學(xué)校的校園景點(diǎn)平面圖,圖中頂點(diǎn)表示主要景點(diǎn),存放景點(diǎn)的編號(hào)、名稱、簡(jiǎn)介等信息,圖中的邊表示景點(diǎn)間的道路,存放路徑長(zhǎng)度等信息。要求能夠
3、回答有關(guān)景點(diǎn)介紹、游覽路徑等問(wèn)題。二、 基本要求(1) 查詢各景點(diǎn)的相關(guān)信息;(2) 查詢圖中任意兩個(gè)景點(diǎn)間的最短路徑。(3) 查詢圖中任意兩個(gè)景點(diǎn)間的所有路徑。(4) 增加、刪除、更新有關(guān)景點(diǎn)和道路的信息。三、 測(cè)試數(shù)據(jù)菜單函數(shù):依次輸入:1,2,3,4,5,6,0 分別對(duì)應(yīng)景點(diǎn)信息查詢,最短路徑查詢,所有路徑查詢,添加景點(diǎn)及路徑信息,刪除景點(diǎn)及路徑信息,修改景點(diǎn)及路徑信息,退出。查詢景點(diǎn)信息:輸入:1,2分別對(duì)應(yīng)按編號(hào)查詢,按景點(diǎn)名稱查詢按編號(hào)查詢:輸入編號(hào):1按景點(diǎn)名稱查詢:輸入名稱:大明橋最短路徑查詢:輸入起始景點(diǎn)和終點(diǎn)景點(diǎn)編號(hào):1,7所有路徑查詢:輸入起始景點(diǎn)和終點(diǎn)景點(diǎn)編號(hào):2,8添
4、加景點(diǎn)及路徑信息:輸入新景點(diǎn)序號(hào):9 輸入新景點(diǎn)名稱:南門 輸入新景點(diǎn)相關(guān)信息:充滿古韻的門,適合拍照 輸入到其余各景點(diǎn)的距離:50,100,20刪除景點(diǎn)及路徑信息:輸入:1,2分別對(duì)應(yīng)按編號(hào)查詢,按景點(diǎn)名稱查詢按編號(hào)查詢:輸入需要?jiǎng)h除的景點(diǎn)編號(hào):8修改景點(diǎn)及路徑信息:輸入:1,2分別對(duì)應(yīng)修改景點(diǎn)信息,修改道路信息修改景點(diǎn)信息:輸入1,2分別對(duì)應(yīng)修改景點(diǎn)名稱,修改景點(diǎn)描述修改景點(diǎn)信息:輸入修改序號(hào):1 輸入修改后的名稱:圖書(shū)館1232四、算法思想先利用CreateUDN 創(chuàng)建初始無(wú)向網(wǎng),通過(guò)main主函數(shù)調(diào)用顯示,操作功能的選擇通過(guò)Menu函數(shù)輸出,根據(jù)游客需求選擇景點(diǎn)信息查詢、景點(diǎn)之間最短路
5、徑查詢、景點(diǎn)之間所有路徑查詢、添加景點(diǎn)信息、刪除景點(diǎn)信息或者修改信息。如果是景點(diǎn)信息查詢, 在search中完成,再調(diào)用SearchMenu選擇是按照景點(diǎn)編號(hào)或者景點(diǎn)名稱查詢,游客輸入相應(yīng)內(nèi)容。如果是景點(diǎn)之間最短路徑查詢或是景點(diǎn)之間所有路徑查詢則游客輸入起始景點(diǎn)和結(jié)束景點(diǎn);最短路徑是用ShortestPath實(shí)現(xiàn),其中運(yùn)用了迪杰斯特拉算法;所有路徑由Searchpath1調(diào)用disppath再調(diào)用path,在path中通過(guò)遞歸算法實(shí)現(xiàn)尋找每一條路并輸出。如果是添加景點(diǎn)信息調(diào)用Addnewsight函數(shù),游客按照提示依次輸入信息內(nèi)容。如果是刪除景點(diǎn)信息,選擇按照名稱刪除或是按照序號(hào)刪除,再調(diào)用D
6、eletesight函數(shù),游客輸入相應(yīng)內(nèi)容進(jìn)行刪除。如果是修改信息,調(diào)用Changesight,Changemenu兩個(gè)函數(shù),游客按提示選擇修改景點(diǎn)信息或者道路信息,再按提示輸入修改后得內(nèi)容。輸出使用調(diào)用的相應(yīng)函數(shù)。信息保存于文件中。校園導(dǎo)游圖添加景點(diǎn)和路徑查詢所有路徑查詢最短路徑修改景點(diǎn)和路徑修改路徑修改景點(diǎn)刪除景點(diǎn)和路徑按編號(hào)按名稱查詢景點(diǎn)信息按編號(hào)按名稱修改名稱修改描述五、 模塊劃分5.1應(yīng)用函數(shù)void CreateUDN(int v,int a); /* 造圖函數(shù) */void narrate(); /*說(shuō)明函數(shù)*/void ShortestPath(int num); /*最短路徑
7、函數(shù)*/void output(int sight1,int sight2); /*輸出函數(shù)*/int Menu(); /* 主菜單 */void search(); /* 查詢景點(diǎn)信息 */int SearchMenu(); /* 查詢子菜單 */void HaMiTonian(int); /* 圖的遍歷 */void Searchpath1(MGraph g); /*查詢兩個(gè)景點(diǎn)間的所有路徑*/void disppath(MGraph g,int i,int j);void path(MGraph g,int i,int j,int k);/*確定路徑上第k+1個(gè)頂點(diǎn)的序號(hào)*/void N
8、extValue(int); void display(); /* 顯示遍歷結(jié)果 */int Addnewsight(int n); /*添加新的景點(diǎn)和路徑*/int Deletesight(); /*刪除景點(diǎn)和路徑*/void Changesight(); /*修改景點(diǎn)和路徑*/int Changemenu(); /*修改路徑或頂點(diǎn)的選擇菜單*/int Sightmenu(); /*選擇需該景點(diǎn)的菜單*/5.2.1主函數(shù)1.功能:初始圖通過(guò)main主函數(shù)調(diào)用顯示,操作功能的選擇通過(guò)Menu函數(shù)輸出,顯示為菜單形式提醒用戶進(jìn)行操作,用戶選擇后在main主函數(shù)中調(diào)用各個(gè)函數(shù)實(shí)現(xiàn)各種功能。2.流程
9、圖:6101432151 輸入相應(yīng)序號(hào) 結(jié)束 開(kāi)始查詢信息刪除信息所有路徑添加信息最短路徑修改信息退出景點(diǎn)信息和操作目錄5.2.2查詢景點(diǎn)信息函數(shù)1.功能:在main主函數(shù)中調(diào)用search,打開(kāi)存儲(chǔ)了信息的文件,在顯示界面顯示已有的景點(diǎn)名稱和序號(hào),游客按需求進(jìn)行序號(hào)查詢或者名稱查詢,輸入需要查詢的序號(hào)或者名稱后會(huì)顯示該景點(diǎn)的名稱及簡(jiǎn)介,而后按任意鍵返回上級(jí)菜單選擇繼續(xù)查詢或者返回主界面,在查詢景點(diǎn)信息函數(shù)中實(shí)現(xiàn)。2.流程圖:noyes21 開(kāi)始按編號(hào)查詢按景點(diǎn)查詢 結(jié)束 輸入相關(guān)信息是否有此景點(diǎn)?沒(méi)有找到! 輸出景點(diǎn)信息 5.2.3查詢兩景點(diǎn)之間最短路徑函數(shù)1.功能:在main函數(shù)中調(diào)用na
10、rrate函數(shù),打開(kāi)存儲(chǔ)了信息的文件,游客輸入起點(diǎn)編號(hào)或者終點(diǎn)編號(hào),利用迪杰斯特拉算法 由ShortestPath最短路徑函數(shù) 選擇一條兩點(diǎn)之間的最短路徑展示給游客,關(guān)閉文件。5.2.4查詢兩景點(diǎn)之間所有路徑函數(shù)1.功能:當(dāng)游客輸入完畢后,根據(jù)之前構(gòu)建的無(wú)向圖,執(zhí)行過(guò)程為進(jìn)層和退層兩個(gè)階段。首先開(kāi)始遞歸進(jìn)層,考慮使用基于深度優(yōu)先思想,在搜素過(guò)程中,按照景點(diǎn)編號(hào)大小依次訪問(wèn)每一個(gè)節(jié)點(diǎn),若訪問(wèn)到一個(gè)未被訪問(wèn)且有路徑相通的點(diǎn)則將其加入數(shù)組P,直到找到目的地,輸出第一條路徑,然后開(kāi)始遞歸退層,按照之前的方式遞歸訪問(wèn)它的所有未被訪問(wèn)的相鄰節(jié)點(diǎn)。并通過(guò)相應(yīng)的設(shè)置標(biāo)志visited的方式使最終能不重復(fù)地走遍
11、所有的簡(jiǎn)單路徑。最后輸出這些路徑即可。5.2.5添加新的頂點(diǎn)和路徑1.功能:在Addnewsight添加新的景點(diǎn)和路徑函數(shù) 中實(shí)現(xiàn),打開(kāi)存儲(chǔ)了信息的文件,輸入需要新添加的景點(diǎn)名稱,基本信息介紹并依次輸入它到原有各景點(diǎn)的距離,將新信息存儲(chǔ)到文件中并保存。5.2.6刪除已有的頂點(diǎn)和路徑1.功能:刪除不需要的景點(diǎn)信息,并保存刪除后的文件,方便下一次瀏覽。2流程圖:21no 結(jié)束 是否有此景點(diǎn)?輸入需要?jiǎng)h除的景點(diǎn)刪除成功沒(méi)有找到y(tǒng)es 開(kāi)始按景點(diǎn)編號(hào)按景點(diǎn)名稱5.2.7修改已有的頂點(diǎn)和路徑1.功能:修改有誤的景點(diǎn)信息,并保存修改后的文件,方便下一次瀏覽。2流程圖:221221 開(kāi)始修改道路信息 結(jié)束
12、輸入相關(guān)信息修改景點(diǎn)信息 輸入道路信息 輸入景點(diǎn)編號(hào)修改景點(diǎn)名稱修改景點(diǎn)描述 輸入相關(guān)信息六、 數(shù)據(jù)結(jié)構(gòu)MGraph定義圖的類型 ,其中包含景點(diǎn),景點(diǎn)之間的距離,景點(diǎn)數(shù)和邊數(shù)。VertexType是景點(diǎn)的結(jié)構(gòu)體,里面包含了景點(diǎn)編號(hào),景點(diǎn)名稱,景點(diǎn)描述。ArcCell是邊的結(jié)構(gòu)體,其中包含了邊的長(zhǎng)度即景點(diǎn)之間的距離。typedef struct ArcCellint adj; /* 相鄰接的景點(diǎn)之間的路程 */ArcCell; /* 定義邊的類型 */typedef struct VertexTypeint number; /* 景點(diǎn)編號(hào) */ char sight100; /* 景點(diǎn)名稱 */
13、 char description1000; /* 景點(diǎn)描述 */VertexType; /* 定義頂點(diǎn)的類型 */typedef structVertexType vex20; /* 圖中的頂點(diǎn),即為景點(diǎn) */ ArcCell arcs2020; /* 圖中的邊,即為景點(diǎn)間的距離 */ int vexnum,arcnum; /* 頂點(diǎn)數(shù),邊數(shù) */MGraph; /* 定義圖的類型 */七、 測(cè)試 7.1.測(cè)試數(shù)據(jù)輸入:根據(jù)游客需求選擇景點(diǎn)信息查詢、景點(diǎn)之間最短路徑查詢、景點(diǎn)之間所有路徑查詢、添加景點(diǎn)信息、刪除景點(diǎn)信息或者修改信息。如果是景點(diǎn)信息查詢,再選擇是按照景點(diǎn)編號(hào)或者景點(diǎn)名稱查詢,游
14、客輸入相應(yīng)內(nèi)容;如果是景點(diǎn)之間最短路徑查詢或是景點(diǎn)之間所有路徑查詢則游客輸入起始景點(diǎn)和結(jié)束景點(diǎn);如果是添加景點(diǎn)信息則按照提示依次輸入信息內(nèi)容;如果是刪除景點(diǎn)信息,選擇按照名稱刪除或是按照序號(hào)刪除,再輸入相應(yīng)內(nèi)容進(jìn)行刪除;如果是修改信息,按提示選擇修改景點(diǎn)信息或者道路信息,再按提示輸入修改后得內(nèi)容預(yù)期的輸出結(jié)果:運(yùn)行程序直接出現(xiàn)各景點(diǎn)及其編號(hào),同時(shí)出現(xiàn)操作菜單,其他結(jié)果依使用者需求而定,請(qǐng)參見(jiàn)程序后的運(yùn)行結(jié)果。1. 菜單函數(shù)2.查詢景點(diǎn)信息(按編號(hào))3.查詢景點(diǎn)信息(按名稱)4.查詢兩景點(diǎn)之間的最短路徑5.查詢兩點(diǎn)之間的所有路徑6.添加新的景點(diǎn)及其路徑添加過(guò)程添加后7.刪除景點(diǎn)刪除過(guò)程刪除后8.
15、修改景點(diǎn)信息修改后9.文件內(nèi)容八、 心得 通過(guò)對(duì)這次對(duì)校園導(dǎo)游系統(tǒng)程序編寫(xiě),我切實(shí)體會(huì)到了如何編寫(xiě)一個(gè)較大的程序。這是我自己相對(duì)獨(dú)立做的最大的一個(gè)程序,過(guò)程中遇到了各種各樣的問(wèn)題。但同時(shí)鞏固了課堂上所學(xué)的知識(shí),也學(xué)到了很多新的東西,也收獲了很多。 拿到題目,第一步就是構(gòu)思,分析,創(chuàng)建。題目要求用無(wú)向網(wǎng)完成,所以我考慮的是用鄰接矩陣存儲(chǔ)這個(gè)無(wú)向網(wǎng),參考了書(shū)上的無(wú)向網(wǎng)的鄰接矩陣存儲(chǔ)程序?qū)懥薈reatUDN。查詢兩個(gè)景點(diǎn)之間的最短路徑剛開(kāi)始我參考的是書(shū)上的迪杰斯特拉算法,后來(lái)發(fā)現(xiàn)書(shū)上定義的頂點(diǎn)的結(jié)構(gòu)體數(shù)組內(nèi)容太簡(jiǎn)單,程序考慮的情況也很簡(jiǎn)單,無(wú)法滿足我題目的需求,于是我又把迪杰斯特拉算法研讀了一遍,自
16、己做了改進(jìn)。查找所有路徑的Searchpath1函數(shù)剛開(kāi)始一直沒(méi)有寫(xiě)出來(lái),我和同學(xué)先在紙上畫(huà)出頂點(diǎn),參考深度優(yōu)先遍歷把整個(gè)路徑走了一遍,但是編程沒(méi)有什么思路,上網(wǎng)查找了關(guān)于這個(gè)算法的資料,看到有人說(shuō)可以考慮用遞歸實(shí)現(xiàn),就試著用遞歸實(shí)現(xiàn),同時(shí)參照迪杰斯特拉算法用一個(gè)數(shù)組收集訪問(wèn)過(guò)的頂點(diǎn),還設(shè)置了一個(gè)標(biāo)志量標(biāo)記頂點(diǎn)是否被訪問(wèn)。文件在上學(xué)期的課設(shè)中我寫(xiě)過(guò),當(dāng)時(shí)學(xué)習(xí)了一些關(guān)于文件的知識(shí),所以運(yùn)用并沒(méi)有遇到太多問(wèn)題,利用文件保存數(shù)據(jù),需要fopen打開(kāi)文件進(jìn)行讀寫(xiě),還要fclose函數(shù)進(jìn)行關(guān)閉操作,可能還會(huì)用到fread讀取文件。后來(lái)知道a+可以繼續(xù)錄入,于是我通過(guò)加入一個(gè)a+形式的語(yǔ)句,實(shí)現(xiàn)了可不定時(shí)
17、地增加景點(diǎn)數(shù)據(jù)的功能所有框架寫(xiě)查找、刪除、修改和添加函數(shù)本身并不太難,寫(xiě)好以后用main函數(shù)調(diào)用可以了。寫(xiě)出框架后,剛開(kāi)始運(yùn)行也是沒(méi)什么問(wèn)題的,但是多做幾步就遇到了問(wèn)題。在添加的時(shí)候,剛開(kāi)始沒(méi)有考慮序號(hào),程序自動(dòng)生成的序號(hào)和我想。要的并不是一種,于是我在添加景點(diǎn)里面讓游客自己輸入序號(hào)。后來(lái)又發(fā)現(xiàn)刪除沒(méi)有考慮找不到需要?jiǎng)h除的目標(biāo)的可能性,用一個(gè)判斷符a來(lái)判斷是否刪除成功。接下來(lái)整個(gè)運(yùn)行都沒(méi)有錯(cuò)但是如果刪除兩個(gè)景點(diǎn)就會(huì)出現(xiàn)問(wèn)題了,試了很久發(fā)現(xiàn)是循環(huán)條件有問(wèn)題,雖然固定了景點(diǎn)編號(hào)number,但是循環(huán)的num和number不能對(duì)應(yīng),于是去詢問(wèn)老師,老師說(shuō)可以把整個(gè)鄰接矩陣重新修改或者設(shè)置特殊符號(hào)控制
18、輸出,我選擇了相對(duì)簡(jiǎn)便的修改方法。這個(gè)程序很長(zhǎng),編寫(xiě)花了很多時(shí)間,在程序編寫(xiě)過(guò)程中,我不斷遇到困難,調(diào)試時(shí)更是出現(xiàn)了很多問(wèn)題,一個(gè)個(gè)的修改,有的花了很長(zhǎng)的時(shí)間。但我的努力和辛苦沒(méi)有白費(fèi),在老師的指導(dǎo),同學(xué)的幫助,和自己的努力下我終于完成了這個(gè)程序。很感謝老師最后的點(diǎn)睛之筆,在我和同學(xué)冥思苦想很長(zhǎng)時(shí)間都沒(méi)有解決方案的時(shí)候是老師幫助我們解決了問(wèn)題。同時(shí)也反映出我思考問(wèn)題的不全面和經(jīng)驗(yàn)的欠缺。 在程序編寫(xiě)和解決問(wèn)題時(shí),每一個(gè)細(xì)節(jié)都很重要,既要避免功能的重復(fù)也要避免功能疏漏的地方。理論和實(shí)踐相結(jié)合是學(xué)好數(shù)據(jù)結(jié)構(gòu)的關(guān)鍵,這次的課設(shè)既培養(yǎng)了我們的自學(xué)能力,也提高了我們的學(xué)習(xí)興趣。九、 源程序#includ
19、e #include #include #include #define Max 20000typedef struct ArcCellint adj; /* 相鄰接的景點(diǎn)之間的路程 */ArcCell; /* 定義邊的類型 */typedef struct VertexTypeint number; /* 景點(diǎn)編號(hào) */ char sight100; /* 景點(diǎn)名稱 */ char description1000; /* 景點(diǎn)描述 */VertexType; /* 定義頂點(diǎn)的類型 */typedef structVertexType vex20; /* 圖中的頂點(diǎn),即為景點(diǎn) */ ArcCe
20、ll arcs2020; /* 圖中的邊,即為景點(diǎn)間的距離 */ int vexnum,arcnum; /* 頂點(diǎn)數(shù),邊數(shù) */MGraph; /* 定義圖的類型 */FILE *fp,*count ; /*變量類型聲明,聲明fp是FILE型指針,用于指向file類型 */MGraph G; /* 把圖定義為全局變量 */char nameofschool100; /*學(xué)校名稱*/ int NUM=9;int P2020; /* 用來(lái)存放圖中的邊 */int p20; /*全局?jǐn)?shù)組,用來(lái)存放路徑上的各頂點(diǎn)*/int visited20; /*全局?jǐn)?shù)組,用來(lái)記錄各頂點(diǎn)被訪問(wèn)的情況*/int a=
21、0; /*全局變量,用來(lái)記錄每對(duì)頂點(diǎn)之間的所有路徑的條數(shù)*/long int D20; /* 輔助變量存儲(chǔ)最短路徑長(zhǎng)度 */ void CreateUDN(int v,int a); /* 造圖函數(shù) */void narrate(); /*說(shuō)明函數(shù)*/void ShortestPath(int num); /*最短路徑函數(shù)*/void output(int sight1,int sight2); /*輸出函數(shù)*/int Menu(); /* 主菜單 */void search(); /* 查詢景點(diǎn)信息 */int SearchMenu(); /* 查詢子菜單 */void HaMiTonian
22、(int); /* 圖的遍歷 */void Searchpath1(MGraph g); /*查詢兩個(gè)景點(diǎn)間的所有路徑*/void disppath(MGraph g,int i,int j);void path(MGraph g,int i,int j,int k); /*確定路徑上第k+1個(gè)頂點(diǎn)的序號(hào)*/void NextValue(int); void display(); /* 顯示遍歷結(jié)果 */int Addnewsight(int n); /*添加新的景點(diǎn)和路徑*/int Deletesight(); /*刪除景點(diǎn)和路徑*/void Changesight(); /*修改景點(diǎn)和路徑
23、*/int Changemenu(); /*修改路徑或頂點(diǎn)的選擇菜單*/int Sightmenu(); /*選擇需該景點(diǎn)的菜單*/void main() /* 主函數(shù) */ int v0,v1; int ck; CreateUDN(NUM,11); do ck=Menu(); switch(ck)case 1: search(); break; case 2:system(cls);narrate(); printf(nnttt請(qǐng)選擇起點(diǎn)景點(diǎn)(0%d):,NUM-1); scanf(%d,&v0); printf(ttt請(qǐng)選擇終點(diǎn)景點(diǎn)(0%d):,NUM-1); scanf(%d,&v1);
24、 ShortestPath(v0); /* 計(jì)算兩個(gè)景點(diǎn)之間的最短路徑 */ output(v0,v1); /* 輸出結(jié)果 */ printf(nntttt請(qǐng)按任意鍵繼續(xù).n); getchar(); getchar();break; case 3:system(cls); narrate(); Searchpath1(G); printf(nntttt請(qǐng)按任意鍵繼續(xù).n); getchar(); getchar(); break;case 4: system(cls); narrate(); NUM=Addnewsight(NUM); system(cls); narrate(); brea
25、k;case 5: NUM=Deletesight(); break;case 6:Changesight(); break;while(ck!=0); int Menu() /* 主菜單 */ int c; int flag; do flag=1; system(cls); narrate(); printf(ntttn); printf(ttt n); printf(ttt 1、查詢景點(diǎn)信息 n); printf(ttt 2、查詢兩景點(diǎn)間最短路徑 n); printf(ttt 3、查詢兩景點(diǎn)間所有路線 n); printf(ttt 4、添加新的景點(diǎn)和路徑 n); printf(ttt 5、
26、刪除已有景點(diǎn)和路徑 n); printf(ttt 6、修改已有景點(diǎn)或路徑 n); printf(ttt 0、退出 n); printf(ttt n); printf(tttn); printf(tttt請(qǐng)輸入您的選擇:); scanf(%d,&c); if(c=1|c=2|c=3|c=4|c=5|c=6|c=0) flag=0; while(flag); return c;int SearchMenu() /* 查詢子菜單函數(shù) */ int c; int flag; do flag=1; system(cls); narrate(); printf(ntttn); printf(ttt n);
27、 printf(ttt 1、按照景點(diǎn)編號(hào)查詢 n); printf(ttt 2、按照景點(diǎn)名稱查詢 n); printf(ttt 0、返回 n); printf(ttt n); printf(tttn); printf(tttt請(qǐng)輸入您的選擇:); scanf(%d,&c); if(c=1|c=2|c=0) flag=0; while(flag); return c;void search() /* 查詢景點(diǎn)信息函數(shù) */ int num; int i; int c; char name20; fp=fopen(guide.txt,r+); /*讀打開(kāi)原文件book.txt*/ count=fo
28、pen(count.txt,r+); /*讀寫(xiě)count文件*/ do system(cls); c=SearchMenu(); switch (c) case 1: system(cls); narrate(); printf(nntt請(qǐng)輸入您要查找的景點(diǎn)編號(hào):); scanf(%d,&num); for(i=0;iNUM;i+) if(num=G.vexi.number) printf(nnttt您要查找景點(diǎn)信息如下:); printf(nnttt%s: %-25snn,G.vexi.sight,G.vexi.description); printf(nttt按任意鍵返回.); getch
29、ar(); getchar(); break; if(i=NUM) printf(nnttt沒(méi)有找到!); printf(nnttt按任意鍵返回.); getchar(); getchar(); break; case 2: system(cls); narrate(); printf(nntt請(qǐng)輸入您要查找的景點(diǎn)名稱:); scanf(%s,name); for(i=0;iNUM;i+) if(!strcmp(name,G.vexi.sight) printf(nnttt您要查找景點(diǎn)信息如下:); printf(nnttt%s:%-25snn,G.vexi.sight,G.vexi.desc
30、ription); printf(nttt按任意鍵返回.); getchar(); getchar(); break; if(i=NUM) printf(nnttt沒(méi)有找到!); printf(nnttt按任意鍵返回.); getchar(); getchar(); break; while(c!=0); fwrite(&G,sizeof(MGraph),1,fp); /*保存到文件中*/ fclose(fp); fprintf(count,%d,NUM); fclose(count);void CreateUDN(int v,int a) /* 創(chuàng)建初始圖函數(shù) */ int i,j; if(
31、fp=fopen(guide.txt,a+)=NULL) /調(diào)用了fopen,要用fclose關(guān)閉 ticket文件保存記錄的詳細(xì)信息 printf(文件未找到n); if(count=fopen(count.txt,w+ )=NULL) /count文件保存記錄的條數(shù) fprintf(count,0); else fscanf(count,%d,&NUM); strcpy(nameofschool,洛陽(yáng)理工學(xué)院開(kāi)元校區(qū)); G.vexnum=v; /* 初始化結(jié)構(gòu)中的景點(diǎn)數(shù)和邊數(shù) */ G.arcnum=a; for(i=0;i20;+i) G.vexi.number=i; /* 初始化每一
32、個(gè)景點(diǎn)的編號(hào) */ /* 初始化每一個(gè)景點(diǎn)名及其景點(diǎn)描述 */ strcpy(G.vex0.sight,大明橋); strcpy(G.vex0.description,落于小河上,風(fēng)景優(yōu)美); strcpy(G.vex1.sight,圖書(shū)館); strcpy(G.vex1.description,環(huán)境優(yōu)雅,充滿書(shū)香氣息,呈環(huán)形); strcpy(G.vex2.sight,教學(xué)樓); strcpy(G.vex2.description,上課和自習(xí)的地方,臨近圖書(shū)館); strcpy(G.vex3.sight,子衿餐廳); strcpy(G.vex3.description,一餐廳,新裝修過(guò)的餐廳
33、,臨近實(shí)驗(yàn)樓,是男女比例最適中的餐廳); strcpy(G.vex4.sight,實(shí)驗(yàn)A樓); strcpy(G.vex4.description,老師辦公室); strcpy(G.vex5.sight,實(shí)驗(yàn)B樓); strcpy(G.vex5.description,計(jì)算機(jī)機(jī)房); strcpy(G.vex6.sight,實(shí)驗(yàn)C樓); strcpy(G.vex6.description,電氣實(shí)驗(yàn)樓); strcpy(G.vex7.sight,璞院餐廳); strcpy(G.vex7.description,第二餐廳,臨近男生宿舍,食物種類比較多); strcpy(G.vex8.sight,琇
34、院餐廳); strcpy(G.vex8.description,第三餐廳,臨近女生宿舍樓,比較便宜); /* 這里把所有的邊假定為20000,含義是這兩個(gè)景點(diǎn)之間是不可到達(dá),極大值 */ for(i=0;i20;+i) for(j=0;j20;+j) G.arcsij.adj=Max; /* 下邊是可直接到達(dá)的景點(diǎn)間的距離,由于兩個(gè)景點(diǎn)間距離是互相的, 所以要對(duì)圖中對(duì)稱的邊同時(shí)賦值。 */ G.arcs01.adj=G.arcs10.adj=50; G.arcs13.adj=G.arcs31.adj=70; G.arcs06.adj=G.arcs60.adj=250; G.arcs14.adj
35、=G.arcs41.adj=80; G.arcs24.adj=G.arcs42.adj=100; G.arcs35.adj=G.arcs53.adj=90; G.arcs52.adj=G.arcs25.adj=100; G.arcs46.adj=G.arcs64.adj=75; G.arcs47.adj=G.arcs74.adj=300; G.arcs27.adj=G.arcs72.adj=400; G.arcs78.adj=G.arcs87.adj=40; fwrite(&G,sizeof(MGraph),1,fp); /保存到文件中fclose(fp); /關(guān)閉文件,但不是屏幕fprint
36、f(count,%d,NUM); fclose(count); void narrate() /* 說(shuō)明函數(shù) */ int i; printf(nt*歡迎使用%s校園導(dǎo)游程序*n,nameofschool); printf(t_n); printf(tttt 景點(diǎn)名稱ttttttn); printf(ttt_n); for(i=0;iNUM;i+) if(G.vexi.number!=-1) printf(tttt%c (%2d)%-10s%cn,3,G.vexi.number,G.vexi.sight,3); /* 輸出景點(diǎn)列表 */ printf(ttt_n);void ShortestP
37、ath(int num) /* 迪杰斯特拉算法最短路徑函數(shù) num為入口點(diǎn)的編號(hào) */ int v,w,i,t; /* i、w和v為計(jì)數(shù)輔助變量 */ int final20; /* 輔助數(shù)組 */ int min; fp=fopen(guide.txt,r+); /讀打開(kāi)原文件book.txt count=fopen(count.txt,r+); /讀寫(xiě)count文件 for(v=0;vNUM;v+) finalv=0; /* 假設(shè)從頂點(diǎn)num到頂點(diǎn)v沒(méi)有最短路徑 */ Dv=G.arcsnumv.adj;/* 將與之相關(guān)的權(quán)值放入D中存放 */ for(w=0;wNUM;w+) /* 設(shè)置
38、為空路徑 */ Pvw=0; if(Dv20000) /* 存在路徑 */ Pvnum=1; /* 存在標(biāo)志置為1 */ Pvv=1; /* 自身到自身 */ Dnum=0; finalnum=1; /* 初始化num頂點(diǎn)屬于S集合 */ /* 開(kāi)始主循環(huán),每一次求得num到某個(gè)頂點(diǎn)的最短路徑,并將其加入到S集合 */ for(i=0;iNUM;+i) /* 其余G.vexnum-1個(gè)頂點(diǎn) */ min=Max; /* 當(dāng)前所知離頂點(diǎn)num的最近距離 */ for(w=0;wNUM;+w) if(!finalw) /* w頂點(diǎn)在v-s中 */ if(Dwmin) /* w頂點(diǎn)離num頂點(diǎn)更近
39、*/ v=w; min=Dw; finalv=1; /* 離num頂點(diǎn)更近的v加入到s集合 */ for(w=0;wNUM;+w) /* 更新當(dāng)前最短路徑極其距離 */ if(!finalw&(min+G.arcsvw.adj)Dw)/* 不在s集合,并且比以前所找到的路徑都短就更新當(dāng)前路徑 */ Dw=min+G.arcsvw.adj; for(t=0;tNUM;t+) Pwt=Pvt; Pww=1; fwrite(&G,sizeof(MGraph),1,fp); /保存到文件中 fclose(fp); fprintf(count,%d,NUM); fclose(count);void output(int sight1,int sight2) /* 輸出函數(shù) */int a,b,c,d,q=0; a=sight2; /* 將景點(diǎn)二賦值給a */ if(a!=sight1) /* 如果景點(diǎn)二不和景點(diǎn)一輸入重合,則進(jìn)行. */printf(nt從%s到%s的最短路徑是,G.vexsight1.sight,G.vexsight2.
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- java原創(chuàng)面試題及答案
- 教法技能考試題及答案
- 阜陽(yáng)衛(wèi)校面試題及答案
- T/CAEPI 64-2023固體回收燃料分類與分級(jí)
- 雙方合伙出資存貨協(xié)議書(shū)
- 武夷巖茶購(gòu)銷合同范本
- 住家病人護(hù)工合同范本
- 無(wú)償占用土地安全協(xié)議書(shū)
- 駕校股份制合同范本
- 體育運(yùn)動(dòng)高齡免責(zé)協(xié)議書(shū)
- 電梯參數(shù)及配置要求
- 作業(yè)治療學(xué)題庫(kù)第七章
- 醫(yī)學(xué)信息檢索與利用智慧樹(shù)知到答案章節(jié)測(cè)試2023年杭州醫(yī)學(xué)院
- 并網(wǎng)前設(shè)備電氣試驗(yàn)、繼電保護(hù)整定、通訊聯(lián)調(diào)
- 用表格為網(wǎng)頁(yè)布局教學(xué)設(shè)計(jì)
- 病原微生物實(shí)驗(yàn)室生物安全管理手冊(cè)
- 上消化道出血病人的觀察與護(hù)理-課件
- 光纜測(cè)試報(bào)告
- 初中物理教育科學(xué)八年級(jí)下冊(cè)第十一章 機(jī)械與功《功》教學(xué)設(shè)計(jì)
- 神經(jīng)病學(xué)人衛(wèi)版習(xí)題集題庫(kù)
- (統(tǒng)編版小學(xué)語(yǔ)文教師)語(yǔ)文新課標(biāo)新舊對(duì)比變化
評(píng)論
0/150
提交評(píng)論