大數(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頁
免費預覽已結(jié)束,剩余39頁可下載查看

下載本文檔

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

文檔簡介

1、洛陽理工學院課程設(shè)計說明書課程名稱數(shù)據(jù)結(jié)構(gòu)課程設(shè)計設(shè)計課題校園導游程序?qū)?業(yè)計算機科學與技術(shù)班級學號姓名完成日期課程設(shè)計任務(wù)書設(shè)計題目:校園導游程序設(shè)計內(nèi)容與要求:問題描述用無向網(wǎng)表示你所在學校的校園景點平面圖,圖中頂點表示主要景 點,存放景點的編號、名稱、簡介等信息,圖中的邊表示景點間的道路, 存放路徑長度等信息。要求能夠回答有關(guān)景點介紹、游覽路徑等問題。 基本要求(1)查詢各景點的相關(guān)信息;(2)查詢圖中任意兩個景點間的最短路徑。(3)查詢圖中任意兩個景點間的所有路徑。(4)增加、刪除、更新有關(guān)景點和道路的信息。指導教師:2016年12月20日課程設(shè)計評語成績:指導教師:年 月 日目錄1、

2、 問題描述 12、 基本要求 13、 測試數(shù)據(jù) 2四、算法思想 35、 模塊劃分 45.1.1 應用函數(shù) 45.1.2 主函數(shù) 55.1.3 查詢景點信息函數(shù) 65.1.4 查詢兩景點之間最短路徑函數(shù) 65.1.5 查詢兩景點之間所有路徑函數(shù) 75.2.6 刪除已有的頂點和路徑 85.2.7 修改已有的頂點和路徑 96、 數(shù)據(jù)結(jié)構(gòu) 107、 測試 118、 心得 199、 源程序 20問題描述用無向網(wǎng)表示你所在學校的校園景點平面圖,圖中頂點表示主要景點,存放景點的編號、名稱、簡介等信息,圖中的邊表示景點間的道路,存放路徑長度等信息。要求能夠回答有關(guān)景點介紹、游覽路徑等問題。二、 基本要求(1)

3、 查詢各景點的相關(guān)信息;(2) 查詢圖中任意兩個景點間的最短路徑。(3) 查詢圖中任意兩個景點間的所有路徑。(4) 增加、刪除、更新有關(guān)景點和道路的信息。4三、 測試數(shù)據(jù)菜單函數(shù):依次輸入:1, 2, 3, 4, 5, 6, 0分別對應景點信息查詢,最短路徑查詢,所有路徑查詢,添加景點及路徑信息,刪除景點及路徑信息,修改景點及路徑信息,退出。查詢景點信息:輸入:1, 2分別對應按編號查詢,按景點名稱查詢按編號查詢:輸入編號:1按景點名稱查詢:輸入名稱:大明橋最短路徑查詢:輸入起始景點和終點景點編號:1, 7所有路徑查詢:輸入起始景點和終點景點編號:2, 8添加景點及路徑信息:輸入新景點序號:9

4、輸入新景點名稱:南門輸入新景點相關(guān)信息:充滿古韻的門,適合拍照輸入到其余各景點的距離:50, 100, 20刪除景點及路徑信息:輸入:1, 2分別對應按編號查詢,按景點名稱查詢按編號查詢:輸入需要刪除的景點編號:8修改景點及路徑信息:輸入:1, 2分別對應修改景點信息,修改道路信息修改景點信息:輸入1, 2分別對應修改景點名稱,修改景點描述修改景點信息:輸入修改序號:1輸入修改后的名稱:圖書館123四、算法思想先禾J用CreateUDN創(chuàng)建初始無向網(wǎng),通過 main主函數(shù)調(diào)用顯示,操作功能 的選擇通過Menu函數(shù)輸出,根據(jù)游客需求選擇景點信息查詢、景點之間最短路 徑查詢、景點之間所有路徑查詢、

5、添加景點信息、刪除景點信息或者修改信息。 如果是景點信息查詢,在search中完成,再調(diào)用SearchMenu選擇是按照景點編號或者景點名稱查詢,游客輸入相應內(nèi)容。如果是景點之間最短路徑查詢或是 景點之間所有路徑查詢則游 客輸入起 始景點和結(jié) 束景點;最短路徑 是用ShortestPath實現(xiàn),其中運用了迪杰斯特拉算法;所有路徑由Searchpathl調(diào)用disppath再調(diào)用path ,在path中通過遞歸算法實現(xiàn)尋找每一條路并輸出。 如果是添加景點信息調(diào)用 Addnewsight函數(shù),游客按照提示依次輸入信息內(nèi)容。 如果是刪除景點信息,選擇按照名稱刪除或是按照序號刪除,再調(diào)用 Delete

6、sight 函數(shù),游客輸入相應內(nèi)容進行刪除。如果是修改信息,調(diào)用 Changesight , ChangemenuW個函數(shù),游客按提示選擇修改景點信息或者道路信 息,再按提示輸入修改后得內(nèi)容。輸出使用調(diào)用的相應函數(shù)。信息保存于文件中。五、 模塊劃分5.1 應用函數(shù)void CreateUDN(int v,int a);/*void narrate();/*void ShortestPath(int num);/*void output(int sight1,int sight2);/*int Menu();/*void search();/*int SearchMenu();/*void Ha

7、MiTonian(int);/*void Searchpath1(MGraph g);/*void disppath(MGraph g,int i,int j);void path(MGraph g,int i,int j,int k);/* void NextValue(int);void display();/*int Addnewsight(int n);/*int Deletesight();/*void Changesight();/*int Changemenu();/*int Sightmenu();/*造圖函數(shù)*/說明函數(shù)*/最短路徑函數(shù)*/輸出函數(shù)*/主菜單 */查詢景點信息

8、*/查詢子菜單*/圖的遍歷*/查詢兩個景點間的所有路徑*/確定路徑上第k+1 個頂點的序號*/顯示遍歷結(jié)果*/添加新的景點和路徑*/刪除景點和路徑*/修改景點和路徑*/修改路徑或頂點的選擇菜單*/選擇需該景點的菜單*/5.2.1主函數(shù)1 .功能:初始圖通過main主函數(shù)調(diào)用顯示,操作功能的選擇通過 Menu函數(shù)輸出, 顯示為菜單形式提醒用戶進行操作,用戶選擇后在 main主函數(shù)中調(diào)用各個函數(shù) 實現(xiàn)各種功能。2 .流程圖:開始1T景點信息和操作目錄輸入相應序號55.2.2查詢景點信息函數(shù)1 .功能:在main主函數(shù)中調(diào)用search,打開存儲了信息的文件,在顯示界面顯 示已有的景點名稱和序號,游

9、客按需求進行序號查詢或者名稱查詢,輸入需要查 詢的序號或者名稱后會顯示該景點的名稱及簡介,而后按任意鍵返回上級菜單選 擇繼續(xù)查詢或者返回主界面,在查詢景點信息函數(shù)中實現(xiàn)。2 .流程圖:按編號查詢按景點查詢沒有找到!5.2.3 查詢兩景點之間最短路徑函數(shù)1 .功能:在main函數(shù)中調(diào)用narrate函數(shù),打開存儲了信息的文件,游客 輸入起點編號或者終點編號,利用迪杰斯特拉算法由ShortestPath最短路徑函 數(shù)選擇一條兩點之間的最短路徑展示給游客,關(guān)閉文件。5.2.4 查詢兩景點之間所有路徑函數(shù)1 .功能:當游客輸入完畢后,根據(jù)之前構(gòu)建的無向圖,執(zhí)行過程為進層和退 層兩個階段。首先開始遞歸進

10、層,考慮使用基于深度優(yōu)先思想,在搜素過程中, 按照景點編號大小依次訪問每一個節(jié)點,若訪問到一個未被訪問且有路徑相通的 點則將其加入數(shù)組P,直到找到目的地,輸出第一條路徑,然后開始遞歸退層, 按照之前的方式遞歸訪問它的所有未被訪問的相鄰節(jié)點。并通過相應的設(shè)置標志visited口 的方式使最終能不重復地走遍所有的簡單路徑。最后輸出這些路徑即 可。5.2.5 添加新的頂點和路徑1 .功能:在Addnewsight添加新的景點和路徑函數(shù) 中實現(xiàn),打開存儲了信 息的文件,輸入需要新添加的景點名稱,基本信息介紹并依次輸入它到原有各景 點的距離,將新信息存儲到文件中并保存。75.2.6刪除已有的頂點和路徑1

11、 .功能:刪除不需要的景點信息,并保存刪除后的文件,方便下一次瀏覽2 .流程圖:9按 景 點 編 號按景點名稱沒有找到刪除成功結(jié)束5.2.7修改已有的頂點和路徑1 .功能:修改有誤的景點信息,并保存修改后的文件,方便下一次瀏覽2 .流程圖:11修改景點信息修改道路信息輸入景點編號2 ZZ輸入道路信息相鄰接的景點之間的路程*/定義邊的類型*/景點編號*/景點名稱*/景點描述*/定義頂點的類型*/typedef structVertexType vex20;ArcCell arcs2020; /* int vexnum,arcnum;MGraph;六、 數(shù)據(jù)結(jié)構(gòu)MGraph義圖的類型,其中包含景點

12、,景點之間的距離,景點數(shù)和邊數(shù) VertexType 是景點的結(jié)構(gòu)體,里面包含了景點編號,景點名稱,景點描述。ArcCell 是邊的結(jié)構(gòu)體,其中包含了邊的長度即景點之間的距離。typedef struct ArcCellint adj;/*ArcCell;/*typedef struct VertexTypeint number;/*char sight100;/*char description1000;/*VertexType;/*/*圖中的頂點,即為景點*/圖中的邊,即為景點間的距離*/*頂點數(shù),邊數(shù)*/*定義圖的類型*/41七、測試7.1. 測試數(shù)據(jù)輸入:根據(jù)游客需求選擇景點信息查詢、

13、景點之間最短路徑查詢、景點之間 所有路徑查詢、添加景點信息、刪除景點信息或者修改信息。如果是景點信息查 詢,再選擇是按照景點編號或者景點名稱查詢,游客輸入相應內(nèi)容;如果是景點之間最短路徑查詢或是景點之間所有路徑查詢則游客輸入起始景點和結(jié)束景點; 如果是添加景點信息則按照提示依次輸入信息內(nèi)容;如果是刪除景點信息,選擇按照名稱刪除或是按照序號刪除,再輸入相應內(nèi)容進行刪除;如果是修改信息, 按提示選擇修改景點信息或者道路信息,再按提示輸入修改后得內(nèi)容預期的輸出結(jié)果:運行程序直接出現(xiàn)各景點及其編號,同時出現(xiàn)操作菜單, 其他結(jié)果依使用者需求而定,請參見程序后的運行結(jié)果。1 .菜單函數(shù)特*歡迎使用格口理工

14、學院開兀校區(qū)校園導游程序*匚n匚房所聿. 息點In.點占;.尋詈京 占宜曾的有有 景兩兩酉已 詢詢詢淼甯 普查查% , 粕、 1234560請輸入您的選擇:2 .查詢景點信息(按編號)* *水* *冰*歡迎使用洛陽理工學阮開兀校區(qū)校園導游程序*杭* * 千黎驗驗院院 大圖教主實實裳 ,I,、>/ / !/ !/ !/ 11;. J. 012345678請輸入您要查找的景點編號:1您要查找景點信息如下:圖書館:環(huán)境優(yōu)雅,充滿書香氣息呈環(huán)形按任意鍵返回.3 .查詢景點信息(按名稱)*宓*京*配*歡迎 使用洛陽理工學 院開元校 區(qū)校園導游程 序*一一z7 012345679§i 請輸

15、入您要查找的景點名稱:大明橋您要查找景點信息如下:大明橋:落于小河上,風景優(yōu)美4 .查詢兩景點之間的最短路徑*歡迎使用洛陽理工學院開元校區(qū)校園導湍程序外*¥*景點名稱主R圭DE012345678g1T,¥ss點點早量成點點起終¥x.J、:.-選選從圖書館到璞院餐廳的最短路徑是(最短距離為330nc) 圖書館一 實驗A樓一璞院督廳請按任意鍵繼續(xù)一.5.查詢兩點之間的所有路徑錯髓盒I攵學樓到瓚院餐廳的所有游覽品胭有:學亶雪院院 致子AH王簽一17 XJr 012345678院明> > > > > 一 一一 亍 ttJT-JT-甲缸 香-&

16、#171;-.嘲答卷兀 璞子子 Ig-s-k*堂坊護Bf眇,眇B(yǎng)f餐樓嘴樓嘍樓褸 a孟SS孟孟子 ,TPIP 二工JP-M二£三 IFJSSB1234566.添加新的景點及其路徑添加過程4 C:UsersG ¥ XDesktQpnpLexe*東*歡迎使用落陽理院開兀校區(qū)校園導三方程序*木*水水水IZH明小學靠驗驗院院大圖教rH頭實實最012345678ABC行褸褸褸一JTJf展輸入新景點的序號'so1曾呼入新景點的名稱 童年入新景點的木 龍曙古矗的門,:“請輸入此景點到第。個景點的距離(單位=Q (同一景點或不可到達用2QQ00表示,極大值), 50添加后*歡迎使用

17、洛B日理工學院開兀校區(qū)校園導游程序杼杼*景點名稱口口口口 事于嘉驗驗院國 畜教PH頭實實 0123456789 /k fk zk fk rv/k/k zk 8US短日或 息點點 每位篁量壹區(qū) 點豆量0?的有有 景BW新已已 詢詢詢加 查查查添、工X% 、 1224560請輸入您的選擇:7 .刪除景點 刪除過程*冰*本歡迎使用1:3陽理工學院開元校區(qū)校園導游程序*林*歡迎使用洛陽理工學院開元校區(qū)校園導游程序* * *(mtABC噓驗償 嗇教主實實鬟Ylzulz-XJk)/ 012345678請輸入您要刪除景點的編號:8刪除成功!按任意鍵返回.一刪除后1路 日或 息點點點 141點星壹蒿 點豆量早

18、的春 景兩兩新已已 詢詢詢加 查杳香_添® 、,、 12 3 4 5 6 0請輸入您的選擇:8 .修改景點信息*歡迎使用 洛 陽理工學院開兀校區(qū)校園導游程序*海強人修改后的景點名機 圖書館123驗驗悍 大圖教子其實實璞南 0 12345679/fx fl-yx-(-/1請輸入您的選擇:1修改成功!修改后*/:.:.:.:*:*歡迎使用洛陽理工學院開元校區(qū)校園導游程序*:*籥臉驗博 而圖教主頭實mSMSI/ XJr Y/ 012345679nnnn34-n-息用點點點 省堂置量早 占宜£早的WP =克兩翳已已 詢詢詢加 查查查12 3 4 5 6 0請輸入您的選擇:9 .文件

19、內(nèi)容 n T . r 文件的編4(E)梢式(0)查看的幫助(H)落于小河上,風景優(yōu)美 暴期鬻嚶行書香氣息,呈環(huán)形課和自習的地方,臨近圖書館 子衿餐五一餐廳,薪裝修過的餐廳,臨近實驗樓,是男女比例最適中的餐廳 t實燧樓 老師辦公室 實驗B樓計算機機房矗矗樓聶二祟儒男生宿舍,食物種類比較多 另三第寓女生宿舍樓,比較便宜-I count -記事本文件舊編瑁(E) 格式Q)查看凹幫助(H)9八、 心得通過對這次對校園導游系統(tǒng)程序編寫,我切實體會到了如何編寫一個較大的程序。 這是我自己相對獨立做的最大的一個程序,過程中遇到了各種各樣的問題。但同時鞏固了課堂上所學的知識,也學到了很多新的東西,也收獲了很多

20、。拿到題目,第一步就是構(gòu)思,分析,創(chuàng)建。題目要求用無向網(wǎng)完成,所以我考慮的是用鄰接矩陣存儲這個無向網(wǎng),參考了書上的無向網(wǎng)的鄰接矩陣存儲程序?qū)懥薈reatUDN。查詢兩個景點之間的最短路徑剛開始我參考的是書上的迪杰斯特拉算法,后來發(fā)現(xiàn)書上定義的頂點的結(jié)構(gòu)體數(shù)組內(nèi)容太簡單,程序考慮的情況也很簡單,無法滿足我題目的需求,于是我又把迪杰斯特拉算法研讀了一遍,自己做了改進。查找所有路徑的Searchpath1 函數(shù)剛開始一直沒有寫出來,我和同學先在紙上畫出頂點,參考深度優(yōu)先遍歷把整個路徑走了一遍,但是編程沒有什么思路,上網(wǎng)查找了關(guān)于這個算法的資料,看到有人說可以考慮用遞歸實現(xiàn),就試著用遞歸實現(xiàn), 同時參

21、照迪杰斯特拉算法用一個數(shù)組收集訪問過的頂點,還設(shè)置了一個標志量標記頂點是否被訪問。文件在上學期的課設(shè)中我寫過,當時學習了一些關(guān)于文件的知識,所以運用并沒有遇到太多問題,利用文件保存數(shù)據(jù),需要 fopen 打開文件進行讀寫,還要fclose函數(shù)進行關(guān)閉操作,可能還會用到 fread讀取文件。后來知道a+可以繼 續(xù)錄入,于是我通過加入一個 a+形式的語句,實現(xiàn)了可不定時地增加景點數(shù)據(jù) 的功能所有框架寫查找、刪除、修改和添加函數(shù)本身并不太難,寫好以后用main函數(shù)調(diào)用可以了。寫出框架后,剛開始運行也是沒什么問題的,但是多做幾步就遇到了問題。在添加的時候,剛開始沒有考慮序號,程序自動生成的序號和我想。

22、要的并不是一種, 于是我在添加景點里面讓游客自己輸入序號。后來又發(fā)現(xiàn)刪除沒有考慮找不到需要刪除的目標的可能性,用一個判斷符a 來判斷是否刪除成功。接下來整個運行都沒有錯但是如果刪除兩個景點就會出現(xiàn)問題了,試了很久發(fā)現(xiàn)是循環(huán)條件有問題,雖然固定了景點編號 number,但是循環(huán)的numffi number不能對應,于是去詢問老師,老師說可以把整個鄰接矩陣重新修改或者設(shè)置特殊符號控制輸出,我選擇了相對簡便的修改方法。這個程序很長,編寫花了很多時間,在程序編寫過程中,我不斷遇到困難,調(diào)試時更是出現(xiàn)了很多問題,一個個的修改,有的花了很長的時間。但我的努力和辛苦沒有白費,在老師的指導,同學的幫助,和自己

23、的努力下我終于完成了這個程序。 很感謝老師最后的點睛之筆,在我和同學冥思苦想很長時間都沒有解決方案的時候是老師幫助我們解決了問題。同時也反映出我思考問題的不全面和經(jīng)驗的欠缺。在程序編寫和解決問題時,每一個細節(jié)都很重要,既要避免功能的重復也要避免功能疏漏的地方。理論和實踐相結(jié)合是學好數(shù)據(jù)結(jié)構(gòu)的關(guān)鍵,這次的課設(shè)既培養(yǎng)了我們的自學能力,也提高了我們的學習興趣。九、 源程序#include <string.h>#include <stdio.h>#include <malloc.h>#include <stdlib.h>#define Max 20000

24、typedef struct ArcCell相鄰接的景點之間的路程*/定義邊的類型*/int adj;/*ArcCell;/*typedef structVertexType vex20;/*ArcCell arcs2020;/*int vexnum,arcnum;/*MGraph;/*FILE *fp,*count ;/*用于指向file 類型 */MGraph G;/*char nameofschool100;/*int NUM=9;int P2020;/*int p20;/*int visited20;/*/int a=0;/*路徑的條數(shù)*/long int D20;/*圖中的頂點,即為

25、景點*/圖中的邊,即為景點間的距離*/頂點數(shù),邊數(shù)*/定義圖的類型*/變量類型聲明,聲明fp 是 FILE 型指針,把圖定義為全局變量*/學校名稱*/用來存放圖中的邊*/全局數(shù)組,用來存放路徑上的各頂點*/全局數(shù)組,用來記錄各頂點被訪問的情況全局變量,用來記錄每對頂點之間的所有輔助變量存儲最短路徑長度*/void CreateUDN(int v,int a);/*void narrate();/*造圖函數(shù)*/說明函數(shù)*/typedef struct VertexType int number;/*景點編號*/char sight100;/*景點名稱*/char description1000;

26、/*景點描述*/VertexType;/*定義頂點的類型*/void ShortestPath(int num);/*void output(int sight1,int sight2);/*int Menu();/*void search();/*int SearchMenu();/*void HaMiTonian(int);/*void Searchpath1(MGraph g);/*void disppath(MGraph g,int i,int j);void path(MGraph g,int i,int j,int k); /* void NextValue(int); void

27、display();int Addnewsight(int n); int Deletesight();void Changesight(); int Changemenu(); int Sightmenu();void main() int v0,v1; int ck;CreateUDN(NUM,11); do ck=Menu(); switch(ck) case 1: search(); break; case 2: system("cls"); narrate(); printf("nnttt scanf("%d",&v0); p

28、rintf("ttt scanf("%d",&v1); ShortestPath(v0); output(v0,v1); printf("nntttt getchar(); getchar();break;/*/*/*/*/*/*/*最短路徑函數(shù)*/輸出函數(shù)*/主菜單 */查詢景點信息*/查詢子菜單*/圖的遍歷*/查詢兩個景點間的所有路徑*/確定路徑上第k+1 個頂點的序號*/顯示遍歷結(jié)果*/添加新的景點和路徑*/刪除景點和路徑*/修改景點和路徑*/修改路徑或頂點的選擇菜單*/選擇需該景點的菜單*/主函數(shù) */請選擇起點景點(。%。: "

29、;,NUM-1);請選擇終點景點(0%d): ",NUM-1);/*計算兩個景點之間的最短路徑*/*輸出結(jié)果*/請按任意鍵繼續(xù).n");system("cls");narrate();Searchpath1(G);printf("nntttt請按任意鍵繼續(xù).n");getchar();getchar();break;case 3:system("cls");narrate();NUM=Addnewsight(NUM);system("cls");narrate();break;case 4:NU

30、M=Deletesight();break;case 5:Changesight();break;while(ck!=0);int Menu()/*主菜單 */int c;int flag;doflag=1;system("cls");narrate();printf("nttt n");printf("ttt11 n");printf("tttI 1、查詢景點信息1 n");printf("tttI 2、查詢兩景點間最短路徑1 n");printf("tttI 3、查詢兩景點間所有路

31、線1 n");printf("tttI 4、添加新的景點和路徑1 n");printf("tttI 5、刪除已有景點和路徑1 n");printf("tttI 6、修改已有景點或路徑1 n");printf("tttI 0、退出1 n");printf("ttt11 n");printf("ttt11n");printf("tttt請輸入您的選擇:");scanf("%d",&c);if(c=1|c=2|c=3|c=4

32、|c=5|c=6|c=0)flag=0;while(flag);return c;int SearchMenu()/*int c;int flag;doflag=1;system("cls");查詢子菜單函數(shù)*/printf("nttti n");printf("ttt11 n");printf("ttt11、按照景點編號查詢I n");printf("ttt12、按照景點名稱查詢I n");printf("ttt0、返回n");printf("ttt11 n&qu

33、ot;);printf("ttt11n");narrate();printf("tttt請輸入您的選擇:");scanf("%d",&c);if(c=1|c=2|c=0)flag=0;while(flag);return c;void search()/*int num;int i; int c; char name20;fp=fopen("guide.txt","r+");/*count=fopen("count.txt","r+");/*do

34、system("cls"); c=SearchMenu();查詢景點信息函數(shù)*/讀打開原文件book.txt*/ 讀寫count文件*/switch (c)case 1:system("cls");narrate();printf("nntt請輸入您要查找的景點編號:");scanf("%d",&num);for(i=0;i<NUM;i+)if(num=G.vexi.number)printf("nnttt您要查找景點信息如下:");printf("nnttt%s: %-

35、25snn",G.vexi.sight,G.vexi.description);printf("nttt按任意鍵返回.");getchar();getchar();break;if(i=NUM)printf("nnttt沒有找到!");printf("nnttt按任意鍵返回.");getchar();getchar();break;case 2:system("cls");narrate();printf("nntt請輸入您要查找的景點名稱:");scanf("%s"

36、;,name);for(i=0;i<NUM;i+)if(!strcmp(name,G.vexi.sight)printf("nnttt您要查找景點信息如下:");printf("nnttt%s:%-25snn",G.vexi.sight,G.vexi.description);printf("nttt按任意鍵返回.");getchar();getchar();break;if(i=NUM)printf("nnttt沒有找到!");printf("nnttt按任意鍵返回.");getchar

37、();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)/*int i,j;if(fp=fopen("guide.txt","a+")=NULL) /ticket 文件保存記錄的詳細信息printf(" 文件未找到n");if(count=fopen("cou

38、nt.txt","w+ ")=NULL) /countfprintf(count,"0");創(chuàng)建初始圖函數(shù)*/調(diào)用了 fopen, 要用 fclose 關(guān)閉文件保存記錄的條數(shù)elsefscanf(count,"%d",&NUM);strcpy(nameofschool," 洛陽理工學院開元校區(qū)");G.vexnum=v;/*數(shù) */G.arcnum=a;for(i=0;i<20;+i) G.vexi.number=i; /*/初始化結(jié)構(gòu)中的景點數(shù)和邊初始化每一個景點的編號/* 初始化每一個景

39、點名及其景點描述*/strcpy(G.vex0.sight," 大明橋 ");strcpy(G.vex0.description," 落于小河上,風景優(yōu)美");strcpy(G.vex1.sight," strcpy(G.vex1.description," strcpy(G.vex2.sight," strcpy(G.vex2.description," strcpy(G.vex3.sight," strcpy(G.vex3.description," ");strcpy(G.vex

40、4.sight," strcpy(G.vex4.description," strcpy(G.vex5.sight," strcpy(G.vex5.description," strcpy(G.vex6.sight," strcpy(G.vex6.description," strcpy(G.vex7.sight," strcpy(G.vex7.description," strcpy(G.vex8.sight,"strcpy(G.vex8.description," /* 這里把所有的邊假定為

41、圖書館");環(huán)境優(yōu)雅,充滿書香氣息,呈環(huán)形");教學樓");上課和自習的地方, 臨近圖書館");子衿餐廳");一餐廳,新裝修過的餐廳,臨近實驗樓,實驗A樓)老師辦公室");實驗 B 樓 ");計算機機房");實驗C樓)電氣實驗樓");璞院餐廳");第二餐廳,臨近男生宿舍,食物種類比較多琇院餐廳");20000,含義是這兩個景點之間是不可到達是男女比例最適");第三餐廳,臨近女生宿舍樓,比較便宜");, 極大值 */for(i=0;i<20;+i)for(j=0

42、;j<20;+j)G.arcsij.adj=Max;/*下邊是可直接到達的景點間的距離,由于兩個景點間距離是互相的,所以要對圖中對稱的邊同時賦值。*/G.arcs01.adj=G.arcs10.adj=50;G.arcs13.adj=G.arcs31.adj=70;G.arcs06.adj=G.arcs60.adj=250;G.arcs14.adj=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.a

43、rcs64.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)閉文件, 但不是屏幕fprintf(count,"%d",NUM);fclose(count);void narrate() /* 說明函數(shù)*/ int i;printf("nt*歡 迎 使 用 %s 校 園 導 游 程 序*n",nameo

44、fschool);printf("tn"); printf("tttt景點名稱ttttttn");printf("tttn");for(i=0;i<NUM;i+)if(G.vexi.number!=-1) printf("tttt%c(%2d)%-10s%cn",3,G.vexi.number,G.vexi.sight,3);/* 輸出景點列表*/ printf("tttn");void ShortestPath(int num) /*點的編號*/int v,w,i,t;/* iint f

45、inal20;/*int min;fp=fopen("guide.txt","r+"); /count=fopen("count.txt","r+"); /迪杰斯特拉算法最短路徑函數(shù)num 為入口、w和v為計數(shù)輔助變量*/輔助數(shù)組*/讀打開原文件book.txt讀寫 count 文件for(v=0;v<NUM;v+)finalv=0; /*Dv=G.arcsnumv.adj;/*for(w=0;w<NUM;w+) /*假設(shè)從頂點num到頂點v沒有最短路徑*/將與之相關(guān)的權(quán)值放入D中存放*/設(shè)置為空路徑*

46、/Pvw=0;if(Dv<20000) /* 存在路徑*/Pvnum=1; /* 存在標志置為1 */Pvv=1; /* 自身到自身*/Dnum=0;finalnum=1; /*初始化num頂點屬于S集合*/* 開始主循環(huán),每一次求得num到某個頂點的最短路徑,并將其加入到S集合*/for(i=0;i<NUM;+i) /*其余 G.vexnum-1 個頂點 */min=Max; /*當前所知離頂點 num的最近距離*/for(w=0;w<NUM;+w) if(!finalw) /* w if(Dw<min) /* w v=w;min=Dw;finalv=1; /*頂點在

47、 v-s 中 */頂點離num頂點更近*/離num頂點更近的v加入到s集合*/for(w=0;w<NUM;+w) /* 更新當前最短路徑極其距離*/保存到文件中不在 s 集合, 并且比以前所找到if(!finalw&&(min+G.arcsvw.adj)<Dw)/*/Dw=min+G.arcsvw.adj;for(t=0;t<NUM;t+)Pwt=Pvt;Pww=1;fwrite(&G,sizeof(MGraph),1,fp); / fclose(fp);fprintf(count,"%d",NUM); fclose(count);

48、void output(int sight1,int sight2) /*輸出函數(shù)*/int a,b,c,d,q=0;a=sight2; /* 將景點二賦值給a */if(a!=sight1) /*如果景點二不和景點一輸入重合,則進行. */printf("nt從 %s 到 %s 的 最 短 路 徑 是",G.vexsight1.sight,G.vexsight2.sight);/*輸出提示信息*/printf("t(最短距離為%dm.)nnt",Da); /*輸出 sight1 到 sight2 的最短路徑長度,存放在D 數(shù)組中 */printf(&q

49、uot;t%s",G.vexsight1.sight); /*輸出景點一的名稱*/d=sight1; /*將景點一的編號賦值給d */for(c=0;c<NUM;+c) gate:; /*標號,可以作為goto 語句跳轉(zhuǎn)的位置*/Pasight1=0;for(b=0;b<NUM;b+) if(G.arcsdb.adj<20000&&Pab) /*如果景點一和它的一個臨界點之間存在路徑且最短路徑*/printf("->%s",G.vexb.sight); /*輸出此節(jié)點的名稱*/q=q+1;/*計數(shù)變量加一,滿8 控制輸出時的

50、換行*/Pab=0; d=b; /*將 b 作為出發(fā)點進行下一次循環(huán)輸出,如此反復*/if(q%8=0) printf("n"); goto gate; /*從當前位置出發(fā)*/ void Searchpath1(MGraph g)/* 查詢兩個景點間的所有路徑*/int l=0;int k=0;int i,j;fp=fopen("guide.txt","r+");/讀打開原文件book.txtcount=fopen("count.txt","r+");/讀寫 count 文件printf(&qu

51、ot;選擇出發(fā)景點:");scanf("%d",&i); printf("選擇目地景點:");scanf("%d",&j); for(;k<g.vexnum;k+)/*g.vexnumber 表示網(wǎng)中的頂點個數(shù)*/if(i=g.vexk.number) i=k;/* 在網(wǎng)中找到其編號與輸入的出發(fā)景點的編號相同的頂點*/for(;l<g.vexnum;l+) if(j=g.vexl.number) j=l;/* 在網(wǎng)中找到其編號與輸入的目地景點的編號相同的頂點*/ printf("n 從

52、%s 到 %s 的 所 有 游 覽 路 徑 有 :nn",g.vexi.sight,g.vexj.sight);/*輸出出發(fā)景點和目地景點的名稱*/disppath(g,i,j);/* 調(diào)用 disppath 函數(shù) , 用來輸出兩個景點間的所有路徑*/fwrite(&G,sizeof(MGraph),1,fp); /保存到文件中fclose(fp); fprintf(count,"%d",NUM); fclose(count); void disppath(MGraph g,int i,int j)int k;p0=i;/ 把i賦2P0 , P是一條道路上

53、的所有景點的數(shù)組for(k=0;k<g.vexnum;k+)visitedi=0;/* 初始化各頂點的訪問標志位,即都為未訪問過的*/a=0;/* 初始化路徑的條數(shù)*/path(g,i,j,0);/* 通過調(diào)用path 函數(shù),找到從vi 到 vj 的所有路徑并輸出*/ void path(MGraph g,int i,int j,int k)/* 確定路徑上第k+1 個頂點的序號*/int s;if(pk=j)/* 找到一條路徑*/a+;/* 路徑的條數(shù)值加1*/printf("第 條:t",a);for(s=0;s<=k-1;s+) /* 輸出一條路徑,s 是頂點

溫馨提示

  • 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

提交評論