數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)之校園導(dǎo)航系統(tǒng)_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)之校園導(dǎo)航系統(tǒng)_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)之校園導(dǎo)航系統(tǒng)_第3頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)之校園導(dǎo)航系統(tǒng)_第4頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)之校園導(dǎo)航系統(tǒng)_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、#大學(xué)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報告題目: 校園導(dǎo)航系統(tǒng)院(系):計(jì)算機(jī)工程學(xué)院 學(xué)生姓名: 班級: 學(xué)號: 起迄日期: 2011.6.19-6.30指導(dǎo)教師: 指導(dǎo)教師評語: 成績: 簽名: 年 月 日20xx20xx年度 第 2 學(xué)期 一、需求分析 1.問題描述:從理工大學(xué)的平面圖中選取10個有代表性的景點(diǎn),抽象成一個無向帶權(quán)圖。以圖中頂點(diǎn)表示景點(diǎn),邊上的權(quán)值表示兩地之間的距離,求取任意兩點(diǎn)間最短路徑。 2.基本功能 本程序主要實(shí)現(xiàn)的功能是為用戶提供路徑咨詢。根據(jù)用戶指定的始點(diǎn)和終點(diǎn)輸出相應(yīng)路徑(用到output()函數(shù)),或者根據(jù)用戶指定的景點(diǎn)輸出景點(diǎn)的信息(用到search()函數(shù))。 3.輸入

2、輸出 本程序主要輸入輸出信息是景點(diǎn)編號和景點(diǎn)名稱,以字符串的形式輸入輸出。二、 概要設(shè)計(jì)1.設(shè)計(jì)思路: 本程序是校園導(dǎo)航系統(tǒng),即求兩點(diǎn)間的最短路徑。其主要算法是迪杰斯特拉算法,在此基礎(chǔ)上再加上菜單函數(shù)輸出函數(shù)造圖函數(shù)查找函數(shù)即可。 2.數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì): 抽象數(shù)據(jù)類型圖的定義如下:adt graph 數(shù)據(jù)對象v:v是具有相同特性的數(shù)據(jù)元素的集合,稱為頂點(diǎn)集。 數(shù)據(jù)關(guān)系r: r=vr vr=(v,w)|v,w v,(v,w)表示v和w之間存在路徑 基本操作p: creatgraph(&g,v,vr) 初始條件:v是圖的頂點(diǎn)集,vr是圖中邊的集合。 操作結(jié)構(gòu):按v和vr的定義構(gòu)造圖g。 des

3、troygraph(&g) 初始條件:圖g存在。 操作結(jié)果:銷毀圖g。 locatevex(g,u) 初始條件:圖g存在,u和g中頂點(diǎn)有相同特征。 操作結(jié)果:若g中存在頂點(diǎn)u,則返回該頂點(diǎn)在圖中位置;否則返回其他信息。 getvex(g,v) 初始條件:圖g存在,v是g中某個頂點(diǎn)。 操作結(jié)果:返回v的信息。 firstedge(g,v) 初始條件:圖g存在,v是g中某個頂點(diǎn)。 操作結(jié)果:返回依附于v的第一條邊。若該頂點(diǎn)在g中沒有鄰接點(diǎn),則返回“空”。 nextedge(g,v,w) 初始條件:圖g存在,v是g中某個頂點(diǎn),w是v的鄰接頂點(diǎn)。 操作結(jié)果:返回依附于v的(相對于w的)下一條邊

4、。若不存在,則返回“空”。 insertvex(&g,v) 初始條件:圖g存在,v和圖中頂點(diǎn)有相同特征。 操作結(jié)果:在圖g中增添新頂點(diǎn)v。 deletevex(&g,v) 初始條件:圖g存在,v是g中某個頂點(diǎn)。 操作結(jié)果:刪除g中頂點(diǎn)v及其相關(guān)的邊。 getshortestpath(g,st,nd,&path) 初始條件:圖g存在,st和nd是g中的兩個頂點(diǎn)。 操作結(jié)果:若st和nd之間存在路徑,則以path返回兩點(diǎn)之間一條最短路徑,否 則返回其他信息。3.軟件結(jié)構(gòu)設(shè)計(jì): void creatudn(int v,int a) 造圖函數(shù) void narrate() 說明

5、函數(shù) void shortestpath(int num) 最短路徑函數(shù) void output(int sight1,int sight2)輸出函數(shù) void search() 查詢函數(shù) char menu() 主菜單 char searchmenu() 查詢子菜單函數(shù) 主程序模塊 帶權(quán)無向圖模塊三、 詳細(xì)設(shè)計(jì) 1. 邊 頂點(diǎn)和圖類型 #define max 20000 #define num 10 typedef struct arccell int adj; /* 相鄰接的景點(diǎn)之間的路程 */ arccell; /* 定義邊的類型 */ typedef struct vertextype

6、 int number; char* sight; char* info; vertextype; /* 定義頂點(diǎn)的類型 */ typedef struct mgraph vertextype vexnum; /* 圖中的頂點(diǎn),即為景點(diǎn) */ arccell arcsnumnum; /* 圖中的邊,即為景點(diǎn)間的距離 */ int vexnum,arcnum; mgraph; /* 定義圖的類型 */2.void main() /* 主函數(shù) */int v0,v1;char ck;createudn(num,11);do ck=menu(); switch(ck) case '1'

7、;: system("cls"); narrate(); /* 輸出景點(diǎn)列表 */ printf("nnttt請選擇起點(diǎn)景點(diǎn)(09):"); scanf("%d",&v0); printf("ttt請選擇終點(diǎn)景點(diǎn)(09):"); scanf("%d",&v1); shortestpath(v0); /* 計(jì)算兩個景點(diǎn)之間的最短路徑 */ output(v0,v1); /* 輸出結(jié)果 */ printf("nntttt請按任意鍵繼續(xù).n"); getchar()

8、; getchar(); break; case '2':search(); break; ;while(ck!='e'); char menu() /* 主菜單 */char c;int flag;do flag=1; system("cls"); narrate(); /* 輸出景點(diǎn)列表 */ printf("ntttn"); printf("ttt n"); printf("ttt 1、查詢景點(diǎn)路徑 n"); printf("ttt 2、查詢景點(diǎn)信息 n")

9、; printf("ttt e、退出 n"); printf("ttt n"); printf("tttn"); printf("tttt請輸入您的選擇:"); scanf("%c",&c); if(c='1'|c='2'|c='e') flag=0;while(flag);return c; char searchmenu() /* 查詢子菜單 */char c;int flag;do flag=1; system("cls&q

10、uot;); narrate(); /* 輸出景點(diǎn)列表 */ printf("ntttn"); printf("ttt n"); printf("ttt 1、按照景點(diǎn)編號查詢 n"); printf("ttt 2、按照景點(diǎn)名稱查詢 n"); printf("ttt e、返回 n"); printf("ttt n"); printf("tttn"); printf("tttt請輸入您的選擇:"); scanf("%c"

11、,&c); if(c='1'|c='2'|c='e') flag=0;while(flag);return c; void search() /* 查詢景點(diǎn)信息 */int num;int i;char c;char name20;do system("cls"); c=searchmenu(); switch (c) case '1': system("cls"); narrate(); /* 輸出景點(diǎn)列表 */ printf("nntt請輸入您要查找的景點(diǎn)編號:&quo

12、t;); scanf("%d",&num); for(i=0;i<num;i+) if(num=g.vexi.number) printf("nnttt您要查找景點(diǎn)信息如下:"); printf("nnttt%-25snn",g.); printf("nttt按任意鍵返回."); getchar(); getchar(); break; if(i=num) printf("nnttt沒有找到!"); printf("nnttt按任意鍵返回.")

13、; getchar(); getchar(); break; case '2': system("cls"); narrate(); printf("nntt請輸入您要查找的景點(diǎn)名稱:"); scanf("%s",name); for(i=0;i<num;i+) if(!strcmp(name,g.vexi.sight) printf("nnttt您要查找景點(diǎn)信息如下:"); printf("nnttt%-25snn",g.); printf("

14、nttt按任意鍵返回."); getchar(); getchar(); break; if(i=num) printf("nnttt沒有找到!"); printf("nnttt按任意鍵返回."); getchar(); getchar(); break; while(c!='e'); void createudn(int v,int a) /* 造圖函數(shù) */ int i,j;g.vexnum=v; /* 初始化結(jié)構(gòu)中的景點(diǎn)數(shù)和邊數(shù) */g.arcnum=a;for(i=0;i<g.vexnum;+i) g.vexi.n

15、umber=i; /* 初始化每一個景點(diǎn)的編號 */* 初始化沒一個景點(diǎn)名及其景點(diǎn)描述 */ g.vex0.sight="實(shí)驗(yàn)樓"g.="學(xué)生及科研人員做實(shí)驗(yàn)"g.vex1.sight="科學(xué)會堂"g.="學(xué)生業(yè)余活動,舉辦各種晚會。"g.vex2.sight="7號樓"g.="男生宿舍樓"g.vex3.sight="3號樓"g.="女生宿舍樓"g.vex4.sig

16、ht="澡堂"g.="供學(xué)生洗澡的地方"g.vex5.sight="操場"g.="學(xué)生鍛煉健身的場所"g.vex6.sight="b區(qū)教學(xué)樓"g.="教室,學(xué)生上課自習(xí)的地方"g.vex7.sight="圖書館"g.="藏有豐富的書籍,供學(xué)生和老師參考"g.vex8.sight="a區(qū)教學(xué)樓"g.="老師辦公室&quo

17、t;g.vex9.sight="餐廳"g.="師生及工作人員吃飯的地方" /* 這里把所有的邊假定為20000,含義是這兩個景點(diǎn)之間是不可到達(dá) */for(i=0;i<g.vexnum;+i) for(j=0;j<g.vexnum;+j) g.arcsij.adj=max; /* 下邊是可直接到達(dá)的景點(diǎn)間的距離,由于兩個景點(diǎn)間距離是互相的, 所以要對圖中對稱的邊同時賦值。*/ g.arcs01.adj=g.arcs10.adj=6; g.arcs02.adj=g.arcs20.adj=4; g.arcs03.adj=g.ar

18、cs30.adj=5; g.arcs14.adj=g.arcs41.adj=1; g.arcs24.adj=g.arcs42.adj=1; g.arcs35.adj=g.arcs53.adj=2; g.arcs57.adj=g.arcs75.adj=4; g.arcs46.adj=g.arcs64.adj=9; g.arcs47.adj=g.arcs74.adj=7; g.arcs68.adj=g.arcs86.adj=2; g.arcs78.adj=g.arcs87.adj=4; g.arcs89.adj=g.arcs98.adj=4; void narrate() /* 說明函數(shù) */in

19、t i=0;printf("nttt *歡迎使用理工大校園導(dǎo)游程序*n");printf("t _n");printf("tt 景點(diǎn)名稱ttn");printf("t _n");for(i=0;i<num;i+) printf("t %c (%2d)%-10sttn",3,i,g.vexi.sight); /* 輸出景點(diǎn)列表 */ printf("t _n"); void shortestpath(int num) /* 迪杰斯特拉算法最短路徑函數(shù) num為入口點(diǎn)的編號

20、 */ int v,w,i,t; /* i、w和v為計(jì)數(shù)變量 */int finalnum; /*若pvw為1,則w是從頂點(diǎn)num到v當(dāng)前求得最短路徑上的頂點(diǎn) */int min; /finalv為1,當(dāng)且僅當(dāng)v屬于s,即已經(jīng)求得從num到v的最短路徑for(v=0;v<num;+v) finalv=0; /* 假設(shè)從頂點(diǎn)num到頂點(diǎn)v沒有最短路徑 */ dv=g.arcsnumv.adj; /* 將與之相關(guān)的權(quán)值放入d中存放 */ for(w=0;w<num;+w) pvw=0; /* 設(shè)置為空路徑 */ if(dv<20000) /* 存在路徑 */ pvnum=1; /

21、* 存在標(biāo)志置為一 */ pvv=1; /* 自身到自身 */ dnum=0;finalnum=1; /* 初始化,num頂點(diǎn)屬于s集合 */ /* 開始主循環(huán),每一次求得num到某個頂點(diǎn)的最短路徑,并將其加入到s集合 */for(i=0;i<num;+i) /* 其余g.vexnum-1個頂點(diǎn) */ min=max; /* 當(dāng)前所知離頂點(diǎn)num的最近距離 */ for(w=0;w<num;+w) if(!finalw) /* w頂點(diǎn)在v-s中 */ if(dw<min) /* w頂點(diǎn)離num頂點(diǎn)更近 */ v=w; min=dw; finalv=1; /* 離num頂點(diǎn)更近

22、的v加入到s集合 */ for(w=0;w<num;+w) /* 更新當(dāng)前最短路徑極其距離 */ if(!finalw&&(min+g.arcsvw.adj)<dw)/* 不在s集合,并且比以前所找到的路徑都短就更新當(dāng)前路徑 */ dw=min+g.arcsvw.adj; for(t=0;t<num;+t) pwt=pvt; pww=1; 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)一

23、輸入重合,則進(jìn)行. */ printf("nt從%s到%s的最短路徑是",g.vexsight1.sight,g.vexsight2.sight);/* 輸出提示信息 */ printf("t(最短距離為 %dm.)nnt",da); /* 輸出sight1到sight2的最短路徑長度,存放在d數(shù)組中 */ printf("t%s",g.vexsight1.sight); /* 輸出景點(diǎn)一的名稱 */ d=sight1; /* 將景點(diǎn)一的編號賦值給d */ for(c=0;c<num;+c) gate:; /* 標(biāo)號,可以作為g

24、oto語句跳轉(zhuǎn)的位置 */ pasight1=0; for(b=0;b<num;b+) if(g.arcsdb.adj<20000&&pab) /* 如果景點(diǎn)一和它的一個臨界點(diǎn)之間存在路徑且最短路徑 */ printf("->%s",g.vexb.sight); /* 輸出此節(jié)點(diǎn)的名稱 */ q=q+1; /* 計(jì)數(shù)變量加一,滿8控制輸出時的換行 */ pab=0; d=b; /* 將b作為出發(fā)點(diǎn)進(jìn)行下一次循環(huán)輸出,如此反復(fù) */ if(q%9=0) printf("n"); goto gate; 3. 輸出函數(shù)算法流程

25、圖 a=sight2 a!=sight1printf("nt從%s到%s的最短",g.vexsight1.sight,g.vexsight2.sight)printf("t(最短距離為 %dm.)nnt",da)printf("t%s",g.vexsight1.sight)d=sight1 c=0 4. 函數(shù)調(diào)用圖: main search createudn narrate shortestpath output menu searchmenu四、 調(diào)試分析 1.本程序?qū)崿F(xiàn)了查詢校園中任意兩景點(diǎn)的最短路徑的功能,同時也顯示了兩景點(diǎn)最

26、短路徑的實(shí)際距離。也可以查詢?nèi)我饩包c(diǎn)的信息,包括按景點(diǎn)編號查詢和按景點(diǎn)名稱查詢。2.考慮道路網(wǎng)多是稀疏網(wǎng),故采用鄰接多重表作存儲結(jié)構(gòu),其空間復(fù)雜度為o(e),此時的時間復(fù)雜度也為o(e)。構(gòu)建鄰接多重表的時間復(fù)雜度為o(n+e),輸出路徑的時間復(fù)雜度為o(n)。由此,本導(dǎo)游程序的時間復(fù)雜度為o(n+e)。3.在創(chuàng)建造圖函數(shù)時,由于兩個景點(diǎn)的距離是相互的,所以要對圖中對稱的邊要同時賦值,開始時沒有注意到這一點(diǎn),導(dǎo)致程序總是有錯誤。4.本程序除了迪杰斯特拉算法外,基本全是用最簡單的c語言編寫的,行數(shù)比較多。有些地方可以用指針鏈表代替,這樣可以縮短篇幅,更加簡單易懂。5.可擴(kuò)展的功能有求校園圖的關(guān)節(jié)

27、點(diǎn),提供校園圖中多個景點(diǎn)的最佳訪問路線查詢,即求途經(jīng)這多個景點(diǎn)的最佳路徑。五、測試結(jié)果1.進(jìn)入程序操作頁面后操作命令符為1,起點(diǎn)景點(diǎn):7號樓(2);終點(diǎn)景點(diǎn):操場(5);最短路徑:7號樓-實(shí)驗(yàn)樓-3號樓-操場最短路徑長度:11m起點(diǎn)景點(diǎn):實(shí)驗(yàn)樓(0);終點(diǎn)景點(diǎn):b區(qū)教學(xué)樓(6);最短路徑:實(shí)驗(yàn)樓-7號樓-澡堂-b區(qū)教學(xué)樓最短路徑長度:14m2. 操作命令符為2, 景點(diǎn)編號查詢:7 景點(diǎn)信息:藏有豐富圖書,供學(xué)生及老師參考 景點(diǎn)名稱查詢:科學(xué)會堂 景點(diǎn)信息:學(xué)生業(yè)余活動,舉辦各種晚會六、用戶手冊1.進(jìn)入演示程序后隨即顯示如下的文本方式的用戶界面:2. 進(jìn)入“查詢景點(diǎn)路徑(1)”的命令后,即提示輸

28、入起始點(diǎn)和終點(diǎn)的編號,輸入編號后即顯示兩點(diǎn)之間的一條最短路徑及距離: 3.進(jìn)入“查詢景點(diǎn)信息(2)”的命令后,即提示按景點(diǎn)編號查詢(1)和按景點(diǎn)名稱查詢(2): 輸入1后顯示如下: 輸入2后顯示如下: 7、 體會與自我評價 由于疏忽,我是在開始上機(jī)做實(shí)驗(yàn)的前一天匆忙選的設(shè)計(jì)課題,那時課題基本已被選完了,就剩下幾個比較難的課題了,我就隨便選擇了校園導(dǎo)航系統(tǒng)。說實(shí)在的,開始的時候?qū)π@導(dǎo)航系統(tǒng)一點(diǎn)也不了解,根本不知道校園導(dǎo)航系統(tǒng)要用到什么知識。就這樣,我迎來了為期兩個星期的數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)實(shí)驗(yàn)。 在接下來的時間里,我就在規(guī)定的時間里去學(xué)校的實(shí)驗(yàn)室做實(shí)驗(yàn),在其余的時間里到網(wǎng)上查詢一些關(guān)于校園導(dǎo)航系統(tǒng)

29、的一些資料,了解編寫校園導(dǎo)航系統(tǒng)涉及的核心知識。通過查詢我知道了校園導(dǎo)航系統(tǒng)的關(guān)鍵是最短路徑問題,在教材中用算法-迪杰斯特拉求最短路徑問題?;藥滋斓臅r間到教室自習(xí),先是弄懂啥叫迪杰斯特拉算法,該算法是怎樣實(shí)現(xiàn)的,然后一直在研究該算法在用c語言是怎樣表達(dá)的。其實(shí)迪杰斯特拉算法的主要思想很容易懂,可是它的c語言描述很難理解,不過最終我還是依據(jù)課本上的c語言算法描述改寫成了適合自己課題的程序代碼。校園導(dǎo)航系統(tǒng)程序的核心即已經(jīng)編出來,其余的主函數(shù)菜單函數(shù)等就很簡單了。整個程序很快就大體編寫完成了,不過在運(yùn)行的時候還是有幾個錯誤。自己看了很長時間,改了又改,終于在同學(xué)的幫助下完成了整個程序。 曲折的是

30、,在最終的答辯時,我還是答了兩次。第一次有點(diǎn)緊張,開始還挺順利,可是突然老師提了一個有關(guān)圖的存儲位置問題,我傻眼了,沒回答上來,第一次答辯就這樣失敗了。后來我回去又仔細(xì)的看了幾遍自己的程序,最終通過了下次的答辯。為期兩周的數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)就這樣結(jié)束了。 通過這次課程設(shè)計(jì),我學(xué)會了很多。一個大型的程序是需要豐富的編程知識和團(tuán)隊(duì)合作。要想以后能夠獨(dú)立自主的開發(fā)新的軟件,現(xiàn)在就必須多多涉獵各種編程知識,為以后打下堅(jiān)實(shí)的基礎(chǔ)。源代碼#include "string.h" #include "stdio.h"#include "malloc.h"

31、;#include "stdlib.h"#define max 20000 #define num 10 typedef struct arccellint adj; /* 相鄰接的景點(diǎn)之間的路程 */arccell; /* 定義邊的類型 */typedef struct vertextypeint number; char* sight; char* info; vertextype; /* 定義頂點(diǎn)的類型 */typedef struct mgraphvertextype vexnum; /* 圖中的頂點(diǎn),即為景點(diǎn) */arccell arcsnumnum; /* 圖中

32、的邊,即為景點(diǎn)間的距離 */int vexnum,arcnum; mgraph; /* 定義圖的類型 */mgraph g; /* 把圖定義為全局變量 */int pnumnum; /* */long int dnum; /* 輔助變量存儲最短路徑長度 */void createudn(int v,int a); void narrate(); void shortestpath(int num); void output(int sight1,int sight2); char menu(); void search(); char searchmenu(); void main() /*

33、主函數(shù) */int v0,v1;char ck;createudn(num,11);do ck=menu(); switch(ck) case '1': system("cls"); narrate(); /* 輸出景點(diǎn)列表 */ printf("nnttt請選擇起點(diǎn)景點(diǎn)(09):"); scanf("%d",&v0); printf("ttt請選擇終點(diǎn)景點(diǎn)(09):"); scanf("%d",&v1); shortestpath(v0); /* 計(jì)算兩個景點(diǎn)之

34、間的最短路徑 */ output(v0,v1); /* 輸出結(jié)果 */ printf("nntttt請按任意鍵繼續(xù).n"); getchar(); getchar(); break; case '2':search(); break; ;while(ck!='e');char menu() /* 主菜單 */char c;int flag;do flag=1; system("cls"); narrate(); /* 輸出景點(diǎn)列表 */ printf("ntttn"); printf("ttt

35、 n"); printf("ttt 1、查詢景點(diǎn)路徑 n"); printf("ttt 2、查詢景點(diǎn)信息 n"); printf("ttt e、退出 n"); printf("ttt n"); printf("tttn"); printf("tttt請輸入您的選擇:"); scanf("%c",&c); if(c='1'|c='2'|c='e') flag=0;while(flag);ret

36、urn c; char searchmenu() /* 查詢子菜單 */char c;int flag;do flag=1; system("cls"); narrate(); /* 輸出景點(diǎn)列表 */ printf("ntttn"); printf("ttt n"); printf("ttt 1、按照景點(diǎn)編號查詢 n"); printf("ttt 2、按照景點(diǎn)名稱查詢 n"); printf("ttt e、返回 n"); printf("ttt n");

37、 printf("tttn"); printf("tttt請輸入您的選擇:"); scanf("%c",&c); if(c='1'|c='2'|c='e') flag=0;while(flag);return c;void search() /* 查詢景點(diǎn)信息 */int num;int i;char c;char name20;do system("cls"); c=searchmenu(); switch (c) case '1': sys

38、tem("cls"); narrate(); /* 輸出景點(diǎn)列表 */ printf("nntt請輸入您要查找的景點(diǎn)編號:"); scanf("%d",&num); for(i=0;i<num;i+) if(num=g.vexi.number) printf("nnttt您要查找景點(diǎn)信息如下:"); printf("nnttt%-25snn",g.); printf("nttt按任意鍵返回."); getchar(); getchar(); b

39、reak; if(i=num) printf("nnttt沒有找到!"); printf("nnttt按任意鍵返回."); getchar(); getchar(); break; case '2': system("cls"); narrate(); /* 輸出景點(diǎn)列表 */ printf("nntt請輸入您要查找的景點(diǎn)名稱:"); scanf("%s",name); for(i=0;i<num;i+) if(!strcmp(name,g.vexi.sight) prin

40、tf("nnttt您要查找景點(diǎn)信息如下:"); printf("nnttt%-25snn",g.); printf("nttt按任意鍵返回."); getchar(); getchar(); break; if(i=num) printf("nnttt沒有找到!"); printf("nnttt按任意鍵返回."); getchar(); getchar(); break; while(c!='e');void createudn(int v,int a) /*

41、造圖函數(shù) */ int i,j;g.vexnum=v; /* 初始化結(jié)構(gòu)中的景點(diǎn)數(shù)和邊數(shù) */g.arcnum=a;for(i=0;i<g.vexnum;+i) g.vexi.number=i; /* 初始化每一個景點(diǎn)的編號 */* 初始化沒一個景點(diǎn)名及其景點(diǎn)描述 */g.vex0.sight="實(shí)驗(yàn)樓"g.="學(xué)生及科研人員做實(shí)驗(yàn)"g.vex1.sight="科學(xué)會堂"g.="學(xué)生業(yè)余活動,舉辦各種晚會。"g.vex2.sight="7號樓"g.vex

42、2.info="男生宿舍樓"g.vex3.sight="3號樓"g.="女生宿舍樓"g.vex4.sight="澡堂"g.="供學(xué)生洗澡的地方"g.vex5.sight="操場"g.="學(xué)生鍛煉健身的場所"g.vex6.sight="b區(qū)教學(xué)樓"g.="教室,學(xué)生上課自習(xí)的地方"g.vex7.sight="圖書館"g.vex7

43、.info="藏有豐富的書籍,供學(xué)生和老師參考"g.vex8.sight="a區(qū)教學(xué)樓"g.="老師辦公室"g.vex9.sight="餐廳"g.="師生及工作人員吃飯的地方"/* 這里把所有的邊假定為20000,含義是這兩個景點(diǎn)之間是不可到達(dá) */for(i=0;i<g.vexnum;+i) for(j=0;j<g.vexnum;+j) g.arcsij.adj=max; /* 下邊是可直接到達(dá)的景點(diǎn)間的距離,由于兩個景點(diǎn)間距離是互相的, 所以要

44、對圖中對稱的邊同時賦值。 */ g.arcs01.adj=g.arcs10.adj=6; g.arcs02.adj=g.arcs20.adj=4; g.arcs03.adj=g.arcs30.adj=5; g.arcs14.adj=g.arcs41.adj=1; g.arcs24.adj=g.arcs42.adj=1; g.arcs35.adj=g.arcs53.adj=2; g.arcs57.adj=g.arcs75.adj=4; g.arcs46.adj=g.arcs64.adj=9; g.arcs47.adj=g.arcs74.adj=7; g.arcs68.adj=g.arcs86.a

45、dj=2; g.arcs78.adj=g.arcs87.adj=4; g.arcs89.adj=g.arcs98.adj=4;void narrate() /* 說明函數(shù) */int i=0;printf("nttt *歡迎使用理工大校園導(dǎo)游程序*n");printf("t _n");printf("tt 景點(diǎn)名稱ttn");printf("t _n");for(i=0;i<num;i+) printf("t %c (%2d)%-10sttn",3,i,g.vexi.sight); /* 輸出景點(diǎn)列表 */ printf("t _n");void shortestpath(int num) /* 迪杰斯特拉

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論