版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 數(shù)學(xué)與計(jì)算機(jī)學(xué)院</b></p><p><b> 課程設(shè)計(jì)說明書</b></p><p> 課 程 名 稱: 數(shù)據(jù)結(jié)構(gòu)-課程設(shè)計(jì) </p><p> 課 程 代 碼: </p><p> 題
2、 目: 校園導(dǎo)航問題 </p><p> 年級(jí)/專業(yè)/班: </p><p> 學(xué) 生 姓 名: </p><p> 學(xué) 號(hào): </p><p> 開 始 時(shí)
3、 間: 年 月 日</p><p> 完 成 時(shí) 間: 年 月 日</p><p><b> 課程設(shè)計(jì)成績:</b></p><p> 指導(dǎo)教師簽名: 年 月 日</p><p> 數(shù) 據(jù) 結(jié) 構(gòu) 課 程
4、設(shè) 計(jì) 任 務(wù) 書</p><p> 學(xué)院名稱: 數(shù)學(xué)與計(jì)算機(jī)學(xué)院 課程代碼: 8404181 </p><p> 專 業(yè): 年 級(jí): </p><p><b> 一、設(shè)計(jì)題目</b></p>
5、<p><b> 校園導(dǎo)航問題</b></p><p><b> 二、主要內(nèi)容</b></p><p> 設(shè)計(jì)西華大學(xué)的平面圖,至少包括10個(gè)以上的場所,找出從任意場所到達(dá)另一場所的最短路徑。</p><p> 三、具體要求及應(yīng)提交的材料</p><p> 1.每個(gè)同學(xué)以自己的
6、學(xué)號(hào)和姓名建一個(gè)文件夾,如:“312009080611101張三”。里面應(yīng)包括:學(xué)生按照課程設(shè)計(jì)的具體要求所開發(fā)的所有源程序(應(yīng)該放到一個(gè)文件夾中)、任務(wù)書和課程設(shè)計(jì)說明書的電子文檔。</p><p> 2.打印的課程設(shè)計(jì)說明書(注意:在封面后夾入打印的“任務(wù)書”以后再裝訂)。</p><p> 四、主要技術(shù)路線提示</p><p> 涉及無向圖的操作。該設(shè)計(jì)
7、共分三部分,一是建立西華大學(xué)平面圖的存儲(chǔ)結(jié)構(gòu),二是解決單源點(diǎn)最短路徑問題,最后再實(shí)現(xiàn)任意一對(duì)場所之間的最短路徑問題。</p><p><b> 五、進(jìn)度安排</b></p><p> 共計(jì)兩周時(shí)間,建議進(jìn)度安排如下:</p><p> 選題,應(yīng)該在上機(jī)實(shí)驗(yàn)之前完成</p><p> 需求分析、概要設(shè)計(jì)可分配4學(xué)時(shí)
8、完成</p><p> 詳細(xì)設(shè)計(jì)可分配4學(xué)時(shí)</p><p> 調(diào)試和分析可分配10學(xué)時(shí)。</p><p> 2學(xué)時(shí)的機(jī)動(dòng),可用于答辯及按教師要求修改課程設(shè)計(jì)說明書。</p><p> 注:只用課內(nèi)上機(jī)時(shí)間一般不能完成設(shè)計(jì)任務(wù),所以需要學(xué)生自行安排時(shí)間做補(bǔ)充。</p><p> 六、推薦參考資料(不少于3篇)
9、</p><p> [1]蘇仕華等編著,數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì),機(jī)械工業(yè)出版社,2007</p><p> ?。?]嚴(yán)蔚敏等編著,數(shù)據(jù)結(jié)構(gòu)(C語言版),清華大學(xué)出版社,2003</p><p> [3]嚴(yán)蔚敏等編著,數(shù)據(jù)結(jié)構(gòu)題集(C語言版),清華大學(xué)出版社,2003</p><p> 指導(dǎo)教師 簽名日期 年 月
10、 日</p><p> 系 主 任 審核日期 年 月 日</p><p><b> 校園導(dǎo)航問題</b></p><p> 摘要:程序設(shè)計(jì)目的是用哈斯圖方式計(jì)算兩個(gè)旅游點(diǎn)的最短距離以及路線。編程所實(shí)現(xiàn)的功能除了可以查詢兩個(gè)旅游點(diǎn)的最短距離以及最短的路線,還可以看到旅游點(diǎn)的介紹,以及逛遍所有旅游點(diǎn)所能組成
11、的所有路線可能,實(shí)現(xiàn)全面查詢。 </p><p> 關(guān)鍵字:景點(diǎn);路線;距離;校園導(dǎo)航</p><p> 課程設(shè)計(jì)題目 </p><p> 設(shè)計(jì)要求:設(shè)計(jì)你的學(xué)校的平面圖,至少包括10個(gè)以上的場所,每兩個(gè)場所間可以有不同</p><p> 的路,且路長也可能不同,找出從任意場所到達(dá)另一場所的最佳路徑(最短路徑)。</p&g
12、t;<p><b> 分析</b></p><p> 2.1設(shè)計(jì)基礎(chǔ):要掌握最短路徑的實(shí)現(xiàn)方式。</p><p> 2.2分析設(shè)計(jì)課題的要求,要求編程實(shí)現(xiàn)以下功能:</p><p><b> (1)查詢景點(diǎn)路徑</b></p><p><b> ?。?)查詢景點(diǎn)信息&
13、lt;/b></p><p><b> ?。?)查看參觀路線</b></p><p> ?。?)查詢各景點(diǎn)之間的距離</p><p><b> 2.3主控菜單設(shè)計(jì)</b></p><p> 為實(shí)現(xiàn)通信錄管理的操作功能,首先設(shè)計(jì)一個(gè)含有多個(gè)菜單項(xiàng)的主控菜單程序,然后</p>&
14、lt;p> 再為這些菜單項(xiàng)配上相應(yīng)的功能。</p><p> 程序運(yùn)行后,給出菜單項(xiàng)的內(nèi)容和輸入提示,如下:</p><p><b> 1.學(xué)校簡介</b></p><p><b> 2.查詢景點(diǎn)路徑</b></p><p><b> 3. 查詢景點(diǎn)信息</b>
15、</p><p><b> 4. 查看參觀路線</b></p><p> 5. 查詢各景點(diǎn)之間的距離</p><p><b> 6. 退出</b></p><p> 2.4設(shè)計(jì)課題已明確要求,有關(guān)的定義如下:</p><p> typedefstructArcCel
16、l{</p><p> intadj; // 相鄰接的景點(diǎn)之間的路程</p><p> char *info;</p><p> }ArcCell; // 定義邊的類型</p><p> typedefstructVertexType{</p><p> int number; // 景點(diǎn)編號(hào)</p&g
17、t;<p> char *sight; // 景點(diǎn)名稱</p><p> char *description; // 景點(diǎn)描述</p><p> }VertexType; // 定義頂點(diǎn)的類型</p><p> typedefstruct{</p><p> VertexType vex[NUM]; // 圖中的頂點(diǎn),
18、即為景點(diǎn)</p><p> ArcCell arcs[NUM][NUM]; // 圖中的邊,即為景點(diǎn)間的距離</p><p> intvexnum,arcnum; // 頂點(diǎn)數(shù),邊數(shù)</p><p> }MGraph; // 定義圖的類型</p><p><b> 共0條評(píng)論...</b></p>
19、<p><b> 3.步驟</b></p><p><b> 3.1函數(shù)調(diào)用圖</b></p><p><b> 函數(shù)調(diào)用關(guān)系</b></p><p> 3.2主代碼#include<iostream > </p><p> #include
20、<string.h></p><p> #include <stdio.h> </p><p> #include <stdlib.h></p><p> #define Max 32767</p><p> #define NUM 11</p><p> typedef
21、struct ArcCell{</p><p> int adj; // 相鄰接的景點(diǎn)之間的路程 </p><p> char *info;</p><p> }ArcCell; // 定義邊的類型 </p><p> typedef struct VertexType{</p><p> int numbe
22、r; // 景點(diǎn)編號(hào) </p><p> char *sight; // 景點(diǎn)名稱 </p><p> char *description; // 景點(diǎn)描述 </p><p> }VertexType; // 定義頂點(diǎn)的類型 </p><p> typedef struct{</p><p> VertexT
23、ype vex[NUM]; // 圖中的頂點(diǎn),即為景點(diǎn) </p><p> ArcCell arcs[NUM][NUM]; // 圖中的邊,即為景點(diǎn)間的距離 </p><p> int vexnum,arcnum; // 頂點(diǎn)數(shù),邊數(shù) </p><p> }MGraph; // 定義圖的類型 </p><p> MGraph G; /
24、/ 把圖定義為全局變量 </p><p> int P[NUM][NUM]; // //</p><p> long int D[NUM]; // 輔助變量存儲(chǔ)最短路徑長度 </p><p> int x[13]={0}; </p><p> void CreateUDN(int v,int a); // 創(chuàng)建圖的函數(shù) </p&
25、gt;<p> void pingmu(); //屏幕輸出函數(shù)</p><p> void introduce();</p><p> void ShortestPath(int num); //最短路徑函數(shù)</p><p> void output(int sight1,int sight2); //輸出函數(shù)</p><p
26、> void PrintMGraph();</p><p> char Menu(); // 主菜單 </p><p> void search(); </p><p> ;// 查詢景點(diǎn)信息 </p><p> char SearchMenu(); // 查詢子菜單 </p><p> void H
27、aMiTonian(int); // 哈密爾頓圖的遍歷 </p><p> void NextValue(int); </p><p> void display(); // 顯示遍歷結(jié)果 </p><p> void main() // 主函數(shù) </p><p> { int v0,v1;</p><p>&
28、lt;b> char ck;</b></p><p> system("color 0");</p><p> CreateUDN(NUM,11);</p><p><b> do</b></p><p><b> { </b></p>
29、<p> ck=Menu();</p><p> switch(ck)</p><p><b> {</b></p><p><b> case'1':</b></p><p> introduce();</p><p> printf
30、("\n\n\t\t\t%-25s\n\n",G.vex[0].description);</p><p> getchar();</p><p> getchar();</p><p><b> break;</b></p><p><b> case '2':&l
31、t;/b></p><p> system("cls");</p><p><b> pingmu();</b></p><p> printf("\n\n\t\t\t請(qǐng)選擇起點(diǎn)景點(diǎn)(1~10):");</p><p> scanf("%d",&a
32、mp;v0);</p><p> printf("\t\t\t請(qǐng)選擇終點(diǎn)景點(diǎn)(1~10):");</p><p> scanf("%d",&v1);</p><p> ShortestPath(v0); // 計(jì)算兩個(gè)景點(diǎn)之間的最短路徑 </p><p> output(v0,v1);
33、// 輸出結(jié)果 </p><p> printf("\n\n\t\t\t\t請(qǐng)按回車鍵繼續(xù)...\n");</p><p> getchar();</p><p> getchar();</p><p><b> break;</b></p><p> case
34、39;3':search();</p><p><b> break;</b></p><p><b> case '4':</b></p><p> system("cls");</p><p><b> pingmu();</b
35、></p><p><b> x[0]=1; </b></p><p> HaMiTonian(1); </p><p> printf("\n\n\t\t\t\t請(qǐng)按回車鍵繼續(xù)...\n");</p><p> getchar();</p><p> getc
36、har();</p><p><b> break;</b></p><p><b> case'5':</b></p><p> PrintMGraph();</p><p> printf("\n\n\t\t\t\t請(qǐng)按回車鍵繼續(xù)...\n");<
37、;/p><p> getchar();</p><p> getchar();</p><p><b> break;</b></p><p><b> };</b></p><p> }while(ck!='e');</p><p&
38、gt;<b> }</b></p><p> char Menu() // 主菜單 //</p><p><b> {</b></p><p><b> char c;</b></p><p><b> int flag;</b></p&g
39、t;<p><b> do{</b></p><p><b> flag=1;</b></p><p> system("cls");</p><p><b> pingmu();</b></p><p> introduce();&
40、lt;/p><p> printf("\n\t\t\n");</p><p> printf("\t\t \n");</p><p> printf("\t\t 1.學(xué)校簡介 \n");</p><p> printf("\t\t 2.查詢景點(diǎn)路徑 \n");
41、</p><p> printf("\t\t 3.查詢景點(diǎn)信息 \n");</p><p> printf("\t\t 4.查看參觀路線 \n");</p><p> printf("\t\t 5.查詢各景點(diǎn)之間的距離 \n");</p><p> printf("
42、\t\t e.退出 \n");</p><p> printf("\t\t \n");</p><p> printf("\t\t\n");</p><p> printf("\t\t\t\t請(qǐng)輸入您的選擇:");</p><p> scanf("%c&q
43、uot;,&c);</p><p> if(c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='e')</p><p><b> flag=0;</b></p><p> }while(flag);&
44、lt;/p><p><b> return c;</b></p><p><b> }</b></p><p> char SearchMenu() // 查詢子菜單 </p><p><b> {</b></p><p><b> ch
45、ar c;</b></p><p><b> int flag;</b></p><p><b> do{</b></p><p><b> flag=1;</b></p><p> system("cls");</p>&
46、lt;p><b> pingmu();</b></p><p> introduce();</p><p> printf("\n\t\t\n");</p><p> printf("\t\t \n");</p><p> printf("\t\t 1、按
47、照景點(diǎn)編號(hào)查詢 \n");</p><p> printf("\t\t 2、按照景點(diǎn)名稱查詢 \n");</p><p> printf("\t\t e、返回 \n");</p><p> printf("\t\t \n");</p><p> printf(&qu
48、ot;\t\t \n");</p><p> printf("\t\t\t請(qǐng)輸入您的選擇:");</p><p> scanf("%c",&c);</p><p> if(c=='1'||c=='2'||c=='e')</p><p&g
49、t;<b> flag=0;</b></p><p> }while(flag);</p><p><b> return c;</b></p><p><b> }</b></p><p> void search() // 查詢景點(diǎn)信息 </p>&
50、lt;p><b> {</b></p><p><b> int num;</b></p><p><b> int i;</b></p><p><b> char c;</b></p><p> char name[20];</p
51、><p><b> do</b></p><p><b> {</b></p><p> system("cls");</p><p> c=SearchMenu();</p><p> switch (c)</p><p>
52、<b> {</b></p><p> case '1': </p><p> system("cls");</p><p> introduce();</p><p><b> pingmu();</b></p><p> p
53、rintf("\n\n\t\t請(qǐng)輸入您要查找的景點(diǎn)編號(hào):");</p><p> scanf("%d",&num);</p><p> for(i=0;i<NUM;i++)</p><p><b> {</b></p><p> if(num==G.vex[i
54、].number)</p><p><b> {</b></p><p> printf("\n\n\t\t\t您要查找景點(diǎn)信息如下:");</p><p> printf("\n\n\t\t\t%-25s\n\n",G.vex[i].description);</p><p&g
55、t; printf("\n\t\t\t按任回車返回...");</p><p> getchar();</p><p> getchar();</p><p><b> break;</b></p><p><b> }</b></p><p>
56、<b> }</b></p><p> if(i==NUM)</p><p><b> {</b></p><p> printf("\n\n\t\t\t沒有找到!");</p><p> printf("\n\n\t\t\t按回車鍵返回...");
57、</p><p> getchar();</p><p> getchar();</p><p><b> }</b></p><p><b> break;</b></p><p><b> case '2':</b><
58、/p><p> system("cls");</p><p><b> pingmu();</b></p><p> introduce();</p><p> printf("\n\n\t\t請(qǐng)輸入您要查找的景點(diǎn)名稱:");</p><p> sca
59、nf("%s",name);</p><p> for(i=1;i<NUM;i++)</p><p><b> {</b></p><p> if(!strcmp(name,</p><p> G.vex[i].sight))</p><p><b>
60、 {</b></p><p> printf("\n\n\t\t\t您要查找景點(diǎn)信息如下:");</p><p> printf("\n\n\t\t\t%-25s\n\n",G.vex[i].description);</p><p> printf("\n\t\t\t按回車鍵返回..."
61、);</p><p> getchar();</p><p> getchar();</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p&
62、gt; if(i==NUM)</p><p><b> {</b></p><p> printf("\n\n\t\t\t沒有找到!");</p><p> printf("\n\n\t\t\t按回車鍵返回...");</p><p> getchar();</p&
63、gt;<p> getchar();</p><p><b> }</b></p><p><b> break;</b></p><p><b> }</b></p><p> }while(c!='e');</p>&l
64、t;p><b> }</b></p><p> void CreateUDN(int v,int a) // 創(chuàng)建圖的函數(shù) </p><p><b> { </b></p><p><b> int i,j;</b></p><p> G.vexnum=v; /
65、/ 初始化結(jié)構(gòu)中的景點(diǎn)數(shù)和邊數(shù) </p><p> G.arcnum=a;</p><p> for(i=1;i<G.vexnum;++i) G.vex[i].number=i; // 初始化每一個(gè)景點(diǎn)的編號(hào) </p><p> // 初始化沒一個(gè)景點(diǎn)名及其景點(diǎn)描述 </p><p> G.vex[0].sight="
66、學(xué)校簡介";</p><p> G.vex[1].sight="東大門";</p><p> G.vex[2].sight="培訓(xùn)樓";</p><p> G.vex[3].sight="氣象樓";</p><p> G.vex[4].sight="文德樓
67、";</p><p> G.vex[5].sight="明德樓";</p><p> G.vex[6].sight="尚賢樓";</p><p> G.vex[7].sight="電影院";</p><p> G.vex[8].sight="北辰樓&quo
68、t;;</p><p> G.vex[9].sight="圖書館";</p><p> G.vex[10].sight="實(shí)驗(yàn)樓";</p><p> // 這里把所有的邊假定為32767,含義是這兩個(gè)景點(diǎn)之間是不可到達(dá) </p><p> for(i=1;i<G.vexnum;++i)&
69、lt;/p><p><b> {</b></p><p> for(j=1;j<G.vexnum;++j) </p><p><b> {</b></p><p> G.arcs[i][j].adj=Max;</p><p> G.arcs[i][j].info=
70、NULL;</p><p><b> }</b></p><p><b> }</b></p><p> //下邊是可直接到達(dá)的景點(diǎn)間的距離,由于兩個(gè)景點(diǎn)間距離是互相的,</p><p> // 所以要對(duì)圖中對(duì)稱的邊同時(shí)賦值。</p><p> G.arcs[1][
71、4].adj=G.arcs[4][1].adj=200;</p><p> G.arcs[1][3].adj=G.arcs[3][1].adj=150;</p><p> G.arcs[3][5].adj=G.arcs[5][3].adj=100;</p><p> G.arcs[3][10].adj=G.arcs[10][3].adj=400;</p&
72、gt;<p> G.arcs[4][6].adj=G.arcs[6][4].adj=200;</p><p> G.arcs[2][5].adj=G.arcs[5][2].adj=200;</p><p> G.arcs[2][4].adj=G.arcs[4][2].adj=100;</p><p> G.arcs[5][7].adj=G.ar
73、cs[7][5].adj=150;</p><p> G.arcs[4][6].adj=G.arcs[6][4].adj=150;</p><p> G.arcs[4][7].adj=G.arcs[7][4].adj=150;</p><p> G.arcs[6][8].adj=G.arcs[8][6].adj=150;</p><p>
74、; G.arcs[7][8].adj=G.arcs[8][7].adj=100;</p><p> G.arcs[6][9].adj=G.arcs[9][6].adj=200;</p><p><b> }</b></p><p> // 打印出鄰接矩陣</p><p> void PrintMGraph()&
75、lt;/p><p><b> {</b></p><p><b> int i,j;</b></p><p> cout<<"\n ====================================================================\n\n ";<
76、/p><p> for(i=1;i<G.vexnum;++i)</p><p><b> {</b></p><p> cout<<G.vex[i].sight<<" ";</p><p><b> }</b></p><p&
77、gt; cout<<endl;</p><p> for(i=1;i<G.vexnum;++i)</p><p><b> {</b></p><p> cout<<"\n\n"<<G.vex[i].sight<<" ";</p>
78、<p> for(j=1;j<G.vexnum;++j)</p><p><b> {</b></p><p> if(G.arcs[i][j].adj==Max)</p><p> cout<<" no ";</p><p><b> else<
79、;/b></p><p> cout<<" "<<G.arcs[i][j].adj;</p><p><b> }</b></p><p><b> }</b></p><p> cout<<"\n\n\n\n=====
80、==============================================================\n\n\n";</p><p><b> }</b></p><p> void introduce() // 介紹函數(shù) </p><p><b> {</b></p>
81、<p><b> int i;</b></p><p> for(i=1;i<=NUM;i++)</p><p><b> { </b></p><p> G.vex[0].description="南京信息工程大學(xué)是江蘇省人民政府和中國氣象局共建的全國重點(diǎn)高校,是江蘇省十一五重點(diǎn)建設(shè)的
82、15所大學(xué)之一。";</p><p> G.vex[1].description="東大門,有五根大柱子 ";</p><p> G.vex[2].description="留學(xué)生學(xué)習(xí)的地方";</p><p> G.vex[3].description="氣象樓,特色樓 ";</p&
83、gt;<p> G.vex[4].description="全校最大的教學(xué)樓 ";</p><p> G.vex[5].description="又一個(gè)教學(xué)樓";</p><p> G.vex[6].description="實(shí)驗(yàn)樓,歷史悠久";</p><p> G.vex[7].d
84、escription="經(jīng)常放恐怖片 ";</p><p> G.vex[8].description="聽說有靈異事件發(fā)生過 ";</p><p> G.vex[9].description="很不錯(cuò)";</p><p> G.vex[10].description="剛建好的,蠻新的,不
85、錯(cuò)";</p><p><b> }</b></p><p><b> }</b></p><p> void pingmu() // 屏幕輸出函數(shù) </p><p><b> { </b></p><p><b> int
86、 i;</b></p><p> printf("\n\n\t\t***************歡迎來到南京信息工程大學(xué)**************\n\n");</p><p> printf("\t\t\n");</p><p> printf("\t\t\t\t學(xué)校簡介\t\t\n"
87、,1,1);</p><p> printf("\t\t\n");</p><p> printf("\t\t\t\t學(xué)校概況\t\t\n",6,6);</p><p> printf("\t\t\n");</p><p> for(i=1;i<NUM;i++)<
88、/p><p><b> {</b></p><p> printf("\t\t%c\t\t(%2d)%-20s%c\t\t\t",1,i,G.vex[i].sight,1); // 輸出景點(diǎn)列表 </p><p><b> }</b></p><p> printf(&quo
89、t;\t\t\n\n");</p><p><b> }</b></p><p> void ShortestPath(int num) // 迪杰斯特拉算法最短路徑函數(shù) num為入口點(diǎn)的編號(hào) </p><p><b> { </b></p><p> int v,w,i,t; /
90、/ i、w和v為計(jì)數(shù)變量 </p><p> int final[NUM]; </p><p><b> int min;</b></p><p> for(v=1;v<NUM;v++)</p><p><b> {</b></p><p> final[v]
91、=0; // 假設(shè)從頂點(diǎn)num到頂點(diǎn)v沒有最短路徑 </p><p> D[v]=G.arcs[num][v].adj;// 將與之相關(guān)的權(quán)值放入D中存放 </p><p> for(w=1;w<NUM;w++) // 設(shè)置為空路徑 </p><p> P[v][w]=0;</p><p> if(D[v]<32767)
92、// 存在路徑 </p><p><b> { </b></p><p> P[v][num]=1; // 存在標(biāo)志置為一 </p><p> P[v][v]=1; // 自身到自身 </p><p><b> }</b></p><p><b> }&l
93、t;/b></p><p><b> D[num]=0;</b></p><p> final[num]=1; // 初始化num頂點(diǎn)屬于S集合 </p><p> // 開始主循環(huán),每一次求得num到某個(gè)頂點(diǎn)的最短路徑,并將其加入到S集合 </p><p> for(i=1;i<NUM;++i) /
94、/ 其余G.vexnum-1個(gè)頂點(diǎn) </p><p><b> {</b></p><p> min=Max; // 當(dāng)前所知離頂點(diǎn)num的最近距離 </p><p> for(w=1;w<NUM;++w)</p><p> if(!final[w]) // w頂點(diǎn)在v-s中 </p><
95、;p> if(D[w]<min) // w頂點(diǎn)離num頂點(diǎn)更近 </p><p><b> {</b></p><p><b> v=w;</b></p><p><b> min=D[w];</b></p><p><b> } </b&
96、gt;</p><p> final[v]=1; // 離num頂點(diǎn)更近的v加入到s集合 </p><p> for(w=1;w<NUM;++w) // 更新當(dāng)前最短路徑極其距離 </p><p> if(!final[w]&&((min+G.arcs[v][w].adj)<D[w]))// 不在s集合,并且比以前所找到的路徑都短就
97、更新當(dāng)前路徑 //</p><p><b> {</b></p><p> D[w]=min+G.arcs[v][w].adj;</p><p> for(t=0;t<NUM;t++)</p><p> P[w][t]=P[v][t];</p><p> P[w][w]=1;<
98、;/p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void output(int sight1,int sight2) // 輸出函數(shù) </p><p><b&g
99、t; {</b></p><p> int a,b,c,d,q=0;</p><p> a=sight2; // 將景點(diǎn)二賦值給a </p><p> if(a!=sight1) // 如果景點(diǎn)二不和景點(diǎn)一輸入重合,則進(jìn)行... </p><p><b> {</b></p><
100、p> printf("\n\t從%s到%s的最短路徑是",G.vex[sight1].sight,G.vex[sight2].sight);// 輸出提示信息 </p><p> printf("\t(最短距離為 %dm.)\n\n\t",D[a]); // 輸出sight1到sight2的最短路徑長度,存放在D[]數(shù)組中 </p><p>
101、; printf("\t%s",G.vex[sight1].sight); // 輸出景點(diǎn)一的名稱 </p><p> d=sight1; // 將景點(diǎn)一的編號(hào)賦值給d </p><p> for(c=0;c<NUM;++c)</p><p><b> {</b></p><p> g
102、ate:; // 標(biāo)號(hào),可以作為goto語句跳轉(zhuǎn)的位置 </p><p> P[a][sight1]=0;</p><p> for(b=0;b<NUM;b++)</p><p><b> {</b></p><p> if(G.arcs[d][b].adj<32767&&P[a][b
103、]) // 如果景點(diǎn)一和它的一個(gè)臨界點(diǎn)之間存在路徑且最短路徑 </p><p><b> {</b></p><p> printf("-->%s",G.vex[b].sight); // 輸出此節(jié)點(diǎn)的名稱 </p><p> q=q+1; // 計(jì)數(shù)變量加一,滿8控制輸出時(shí)的換行 </p><
104、;p> P[a][b]=0;</p><p> d=b; // 將b作為出發(fā)點(diǎn)進(jìn)行下一次循環(huán)輸出,如此反復(fù) </p><p> if(q%8==0) printf("\n");</p><p> goto gate;</p><p><b> }</b></p><
105、p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void HaMiTonian(int m) // 哈密爾頓圖的遍歷 </p
106、><p><b> { </b></p><p> if(m>8) return; </p><p> L: NextValue(m); </p><p> if(x[m]==0) </p><p><b> return; </b></p><
107、;p> if(m==7&&G.arcs[1][x[8]-1].adj!=32767) </p><p> display(); </p><p><b> else </b></p><p> HaMiTonian(m+1); </p><p><b> goto L; <
108、/b></p><p><b> } </b></p><p> void NextValue(int k) </p><p><b> { </b></p><p><b> int j; </b></p><p> l:x[k]=(x
109、[k]+1)%10; </p><p> if(x[k]==0) </p><p><b> return; </b></p><p> if(G.arcs[x[k-1]-1][x[k]-1].adj!=32767) </p><p><b> { </b></p><p
110、> for(j=0;j<k;j++) </p><p> if(x[j]==x[k]) </p><p><b> goto l; </b></p><p><b> return; </b></p><p><b> } </b></p>
111、<p><b> else </b></p><p><b> goto l; </b></p><p><b> } </b></p><p> void display() </p><p><b> { </b></p>
112、;<p><b> int i=1;</b></p><p> printf("\n\n\t");</p><p> for(i=1;i<8;i++) </p><p> printf("%s->",G.vex[x[i]-1].sight); </p>&l
113、t;p> printf("出口"); </p><p> printf("\n");</p><p><b> } </b></p><p><b> 3.3實(shí)現(xiàn)截圖</b></p><p><b> 一開始的頁面</b>
114、</p><p><b> 學(xué)校的簡介</b></p><p> 所需要的兩個(gè)景點(diǎn)的最短路線及距離</p><p> 所要參觀的景點(diǎn)的介紹</p><p><b> 所有景點(diǎn)的參觀路線</b></p><p><b> 每兩個(gè)景點(diǎn)間的距離</b>
115、;</p><p><b> 總結(jié)討論</b></p><p> 在寫輸入語句中沒有正確引用,例如在scanf("%d",&num);中沒有</p><p> 對(duì)num加&引用而只寫了num;原因是在下面的num=G.vex[i].number=i語句中,num地址存放了操作數(shù)字,不引用系統(tǒng)就會(huì)出錯(cuò)。其
116、他地方的scanf語句也是出現(xiàn)同樣的問題,例如scanf("%d",&v0); scanf("%d",&v1);在輸入起始點(diǎn)和終點(diǎn)的時(shí)候,V0,V1沒有用引用地址符號(hào),因此在執(zhí)行輸入的時(shí)候,系統(tǒng)就會(huì)認(rèn)定是非法寫入操作,從而導(dǎo)致系統(tǒng)出錯(cuò)。</p><p> 語法邏輯出錯(cuò),在執(zhí)行的時(shí)候,有的時(shí)候出現(xiàn)死循環(huán),有的時(shí)候屏幕出現(xiàn)null和亂碼。</p>
117、<p> 語句的編寫有誤,不合法。如在我寫主菜單和子菜單里寫switch語句的時(shí)候,do while 語句與if else語句嵌套使用,使程序邏輯出現(xiàn)混亂,造成調(diào)試出錯(cuò)。</p><p> 變量名的定義出錯(cuò),造成調(diào)用的時(shí)候出錯(cuò),不過改過來就好了</p><p> 算法的編寫不全面,漏掉個(gè)別語句,如在調(diào)試的時(shí)候檢查發(fā)現(xiàn)寫迪杰斯特拉(DijkStra)算法的時(shí)候并沒有寫完整,
118、造成輸出結(jié)果不正確;開始查找錯(cuò)誤的時(shí)候并不知道錯(cuò)在哪里,但經(jīng)過與書本上的算法進(jìn)行核對(duì)以后,才找出問題根源所在。</p><p> 定義數(shù)據(jù)類型出錯(cuò),前面定義的數(shù)據(jù)類型是字符型后怯定義成整形,即數(shù)據(jù)類型不一致,造成調(diào)試出錯(cuò)。</p><p> 程序調(diào)試出來了,但沒有達(dá)到預(yù)先想要的結(jié)果。</p><p> 這些小問題都是比較熟悉的問題,開始進(jìn)行調(diào)試的時(shí)候都會(huì)出現(xiàn),
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---校園導(dǎo)航問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-校園導(dǎo)航
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)校園導(dǎo)航
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-校園導(dǎo)航系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--校園導(dǎo)航系統(tǒng)
- 校園導(dǎo)航系統(tǒng)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--校園導(dǎo)航系統(tǒng)
- 校園導(dǎo)航系統(tǒng)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)導(dǎo)航圖
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--校園導(dǎo)游系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)校園導(dǎo)游咨詢課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-- 校園導(dǎo)游系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)迷宮問題課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)導(dǎo)航系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)導(dǎo)航系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告----迷宮問題
- 數(shù)據(jù)結(jié)構(gòu),課程設(shè)計(jì),校園最短路徑問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---迷宮問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-校園導(dǎo)游程序
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-校園導(dǎo)游程序
評(píng)論
0/150
提交評(píng)論