版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、洛 陽 理 工 學 院課 程 設 計 說 明 書課程名稱 數(shù)據(jù)結(jié)構(gòu)課程設計 設計課題 校園導游程序 專 業(yè) 計算機科學與技術(shù) 班 級 學 號 姓 名 完成日期 課 程 設 計 任 務 書設計題目: 校園導游程序 設計內(nèi)容與要求:問題描述用無向網(wǎng)表示你所在學校的校園景點平面圖,圖中頂點表示主要景點,存放景點的編號、名稱、簡介等信息,圖中的邊表示景點間的道路,存放路徑長度等信息。要求能夠回答有關(guān)景點介紹、游覽路徑等問題。基本要求 (1) 查詢各景點的相關(guān)信息;(2) 查詢圖中任意兩個景點間的最短路徑。(3) 查詢圖中任意兩個景點間的所有路徑。(4) 增加、刪除、更新有關(guān)景點和道路的信息。 指導教師
2、: 2016 年 12 月 20 日課 程 設 計 評 語 成績: 指導教師:_ 年 月 日目錄一、問題描述1二、 基本要求1三、 測試數(shù)據(jù)2四、算法思想3五、 模塊劃分45.1應用函數(shù)45.2.1主函數(shù)55.2.2查詢景點信息函數(shù)65.2.3查詢兩景點之間最短路徑函數(shù)65.2.4查詢兩景點之間所有路徑函數(shù)75.2.6刪除已有的頂點和路徑85.2.7修改已有的頂點和路徑9六、 數(shù)據(jù)結(jié)構(gòu)10七、 測試11八、 心得19九、 源程序20一、 問題描述用無向網(wǎng)表示你所在學校的校園景點平面圖,圖中頂點表示主要景點,存放景點的編號、名稱、簡介等信息,圖中的邊表示景點間的道路,存放路徑長度等信息。要求能夠
3、回答有關(guān)景點介紹、游覽路徑等問題。二、 基本要求(1) 查詢各景點的相關(guān)信息;(2) 查詢圖中任意兩個景點間的最短路徑。(3) 查詢圖中任意兩個景點間的所有路徑。(4) 增加、刪除、更新有關(guān)景點和道路的信息。三、 測試數(shù)據(jù)菜單函數(shù):依次輸入:1,2,3,4,5,6,0 分別對應景點信息查詢,最短路徑查詢,所有路徑查詢,添加景點及路徑信息,刪除景點及路徑信息,修改景點及路徑信息,退出。查詢景點信息:輸入:1,2分別對應按編號查詢,按景點名稱查詢按編號查詢:輸入編號:1按景點名稱查詢:輸入名稱:大明橋最短路徑查詢:輸入起始景點和終點景點編號:1,7所有路徑查詢:輸入起始景點和終點景點編號:2,8添
4、加景點及路徑信息:輸入新景點序號:9 輸入新景點名稱:南門 輸入新景點相關(guān)信息:充滿古韻的門,適合拍照 輸入到其余各景點的距離:50,100,20刪除景點及路徑信息:輸入:1,2分別對應按編號查詢,按景點名稱查詢按編號查詢:輸入需要刪除的景點編號:8修改景點及路徑信息:輸入:1,2分別對應修改景點信息,修改道路信息修改景點信息:輸入1,2分別對應修改景點名稱,修改景點描述修改景點信息:輸入修改序號:1 輸入修改后的名稱:圖書館1232四、算法思想先利用createudn 創(chuàng)建初始無向網(wǎng),通過main主函數(shù)調(diào)用顯示,操作功能的選擇通過menu函數(shù)輸出,根據(jù)游客需求選擇景點信息查詢、景點之間最短路
5、徑查詢、景點之間所有路徑查詢、添加景點信息、刪除景點信息或者修改信息。如果是景點信息查詢, 在search中完成,再調(diào)用searchmenu選擇是按照景點編號或者景點名稱查詢,游客輸入相應內(nèi)容。如果是景點之間最短路徑查詢或是景點之間所有路徑查詢則游客輸入起始景點和結(jié)束景點;最短路徑是用shortestpath實現(xiàn),其中運用了迪杰斯特拉算法;所有路徑由searchpath1調(diào)用disppath再調(diào)用path,在path中通過遞歸算法實現(xiàn)尋找每一條路并輸出。如果是添加景點信息調(diào)用addnewsight函數(shù),游客按照提示依次輸入信息內(nèi)容。如果是刪除景點信息,選擇按照名稱刪除或是按照序號刪除,再調(diào)用d
6、eletesight函數(shù),游客輸入相應內(nèi)容進行刪除。如果是修改信息,調(diào)用changesight,changemenu兩個函數(shù),游客按提示選擇修改景點信息或者道路信息,再按提示輸入修改后得內(nèi)容。輸出使用調(diào)用的相應函數(shù)。信息保存于文件中。校園導游圖添加景點和路徑查詢所有路徑查詢最短路徑修改景點和路徑修改路徑修改景點刪除景點和路徑按編號按名稱查詢景點信息按編號按名稱修改名稱修改描述五、 模塊劃分5.1應用函數(shù)void createudn(int v,int a); /* 造圖函數(shù) */void narrate(); /*說明函數(shù)*/void shortestpath(int num); /*最短路徑
7、函數(shù)*/void output(int sight1,int sight2); /*輸出函數(shù)*/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);/*確定路徑上第k+1個頂點的序號*/void n
8、extvalue(int); void display(); /* 顯示遍歷結(jié)果 */int addnewsight(int n); /*添加新的景點和路徑*/int deletesight(); /*刪除景點和路徑*/void changesight(); /*修改景點和路徑*/int changemenu(); /*修改路徑或頂點的選擇菜單*/int sightmenu(); /*選擇需該景點的菜單*/5.2.1主函數(shù)1.功能:初始圖通過main主函數(shù)調(diào)用顯示,操作功能的選擇通過menu函數(shù)輸出,顯示為菜單形式提醒用戶進行操作,用戶選擇后在main主函數(shù)中調(diào)用各個函數(shù)實現(xiàn)各種功能。2.流程
9、圖:6101432151 輸入相應序號 結(jié)束 開始查詢信息刪除信息所有路徑添加信息最短路徑修改信息退出景點信息和操作目錄5.2.2查詢景點信息函數(shù)1.功能:在main主函數(shù)中調(diào)用search,打開存儲了信息的文件,在顯示界面顯示已有的景點名稱和序號,游客按需求進行序號查詢或者名稱查詢,輸入需要查詢的序號或者名稱后會顯示該景點的名稱及簡介,而后按任意鍵返回上級菜單選擇繼續(xù)查詢或者返回主界面,在查詢景點信息函數(shù)中實現(xiàn)。2.流程圖:noyes21 開始按編號查詢按景點查詢 結(jié)束 輸入相關(guān)信息是否有此景點?沒有找到! 輸出景點信息 5.2.3查詢兩景點之間最短路徑函數(shù)1.功能:在main函數(shù)中調(diào)用na
10、rrate函數(shù),打開存儲了信息的文件,游客輸入起點編號或者終點編號,利用迪杰斯特拉算法 由shortestpath最短路徑函數(shù) 選擇一條兩點之間的最短路徑展示給游客,關(guān)閉文件。5.2.4查詢兩景點之間所有路徑函數(shù)1.功能:當游客輸入完畢后,根據(jù)之前構(gòu)建的無向圖,執(zhí)行過程為進層和退層兩個階段。首先開始遞歸進層,考慮使用基于深度優(yōu)先思想,在搜素過程中,按照景點編號大小依次訪問每一個節(jié)點,若訪問到一個未被訪問且有路徑相通的點則將其加入數(shù)組p,直到找到目的地,輸出第一條路徑,然后開始遞歸退層,按照之前的方式遞歸訪問它的所有未被訪問的相鄰節(jié)點。并通過相應的設置標志visited的方式使最終能不重復地走遍
11、所有的簡單路徑。最后輸出這些路徑即可。5.2.5添加新的頂點和路徑1.功能:在addnewsight添加新的景點和路徑函數(shù) 中實現(xiàn),打開存儲了信息的文件,輸入需要新添加的景點名稱,基本信息介紹并依次輸入它到原有各景點的距離,將新信息存儲到文件中并保存。5.2.6刪除已有的頂點和路徑1.功能:刪除不需要的景點信息,并保存刪除后的文件,方便下一次瀏覽。2流程圖:21no 結(jié)束 是否有此景點?輸入需要刪除的景點刪除成功沒有找到y(tǒng)es 開始按景點編號按景點名稱5.2.7修改已有的頂點和路徑1.功能:修改有誤的景點信息,并保存修改后的文件,方便下一次瀏覽。2流程圖:221221 開始修改道路信息 結(jié)束
12、輸入相關(guān)信息修改景點信息 輸入道路信息 輸入景點編號修改景點名稱修改景點描述 輸入相關(guān)信息六、 數(shù)據(jù)結(jié)構(gòu)mgraph定義圖的類型 ,其中包含景點,景點之間的距離,景點數(shù)和邊數(shù)。vertextype是景點的結(jié)構(gòu)體,里面包含了景點編號,景點名稱,景點描述。arccell是邊的結(jié)構(gòu)體,其中包含了邊的長度即景點之間的距離。typedef struct arccellint adj; /* 相鄰接的景點之間的路程 */arccell; /* 定義邊的類型 */typedef struct vertextypeint number; /* 景點編號 */ char sight100; /* 景點名稱 */
13、 char description1000; /* 景點描述 */vertextype; /* 定義頂點的類型 */typedef structvertextype vex20; /* 圖中的頂點,即為景點 */ arccell arcs2020; /* 圖中的邊,即為景點間的距離 */ int vexnum,arcnum; /* 頂點數(shù),邊數(shù) */mgraph; /* 定義圖的類型 */七、 測試 7.1.測試數(shù)據(jù)輸入:根據(jù)游客需求選擇景點信息查詢、景點之間最短路徑查詢、景點之間所有路徑查詢、添加景點信息、刪除景點信息或者修改信息。如果是景點信息查詢,再選擇是按照景點編號或者景點名稱查詢,游
14、客輸入相應內(nèi)容;如果是景點之間最短路徑查詢或是景點之間所有路徑查詢則游客輸入起始景點和結(jié)束景點;如果是添加景點信息則按照提示依次輸入信息內(nèi)容;如果是刪除景點信息,選擇按照名稱刪除或是按照序號刪除,再輸入相應內(nèi)容進行刪除;如果是修改信息,按提示選擇修改景點信息或者道路信息,再按提示輸入修改后得內(nèi)容預期的輸出結(jié)果:運行程序直接出現(xiàn)各景點及其編號,同時出現(xiàn)操作菜單,其他結(jié)果依使用者需求而定,請參見程序后的運行結(jié)果。1. 菜單函數(shù)2.查詢景點信息(按編號)3.查詢景點信息(按名稱)4.查詢兩景點之間的最短路徑5.查詢兩點之間的所有路徑6.添加新的景點及其路徑添加過程添加后7.刪除景點刪除過程刪除后8.
15、修改景點信息修改后9.文件內(nèi)容八、 心得 通過對這次對校園導游系統(tǒng)程序編寫,我切實體會到了如何編寫一個較大的程序。這是我自己相對獨立做的最大的一個程序,過程中遇到了各種各樣的問題。但同時鞏固了課堂上所學的知識,也學到了很多新的東西,也收獲了很多。 拿到題目,第一步就是構(gòu)思,分析,創(chuàng)建。題目要求用無向網(wǎng)完成,所以我考慮的是用鄰接矩陣存儲這個無向網(wǎng),參考了書上的無向網(wǎng)的鄰接矩陣存儲程序?qū)懥薱reatudn。查詢兩個景點之間的最短路徑剛開始我參考的是書上的迪杰斯特拉算法,后來發(fā)現(xiàn)書上定義的頂點的結(jié)構(gòu)體數(shù)組內(nèi)容太簡單,程序考慮的情況也很簡單,無法滿足我題目的需求,于是我又把迪杰斯特拉算法研讀了一遍,自
16、己做了改進。查找所有路徑的searchpath1函數(shù)剛開始一直沒有寫出來,我和同學先在紙上畫出頂點,參考深度優(yōu)先遍歷把整個路徑走了一遍,但是編程沒有什么思路,上網(wǎng)查找了關(guān)于這個算法的資料,看到有人說可以考慮用遞歸實現(xiàn),就試著用遞歸實現(xiàn),同時參照迪杰斯特拉算法用一個數(shù)組收集訪問過的頂點,還設置了一個標志量標記頂點是否被訪問。文件在上學期的課設中我寫過,當時學習了一些關(guān)于文件的知識,所以運用并沒有遇到太多問題,利用文件保存數(shù)據(jù),需要fopen打開文件進行讀寫,還要fclose函數(shù)進行關(guān)閉操作,可能還會用到fread讀取文件。后來知道a+可以繼續(xù)錄入,于是我通過加入一個a+形式的語句,實現(xiàn)了可不定時
17、地增加景點數(shù)據(jù)的功能所有框架寫查找、刪除、修改和添加函數(shù)本身并不太難,寫好以后用main函數(shù)調(diào)用可以了。寫出框架后,剛開始運行也是沒什么問題的,但是多做幾步就遇到了問題。在添加的時候,剛開始沒有考慮序號,程序自動生成的序號和我想。要的并不是一種,于是我在添加景點里面讓游客自己輸入序號。后來又發(fā)現(xiàn)刪除沒有考慮找不到需要刪除的目標的可能性,用一個判斷符a來判斷是否刪除成功。接下來整個運行都沒有錯但是如果刪除兩個景點就會出現(xiàn)問題了,試了很久發(fā)現(xiàn)是循環(huán)條件有問題,雖然固定了景點編號number,但是循環(huán)的num和number不能對應,于是去詢問老師,老師說可以把整個鄰接矩陣重新修改或者設置特殊符號控制
18、輸出,我選擇了相對簡便的修改方法。這個程序很長,編寫花了很多時間,在程序編寫過程中,我不斷遇到困難,調(diào)試時更是出現(xiàn)了很多問題,一個個的修改,有的花了很長的時間。但我的努力和辛苦沒有白費,在老師的指導,同學的幫助,和自己的努力下我終于完成了這個程序。很感謝老師最后的點睛之筆,在我和同學冥思苦想很長時間都沒有解決方案的時候是老師幫助我們解決了問題。同時也反映出我思考問題的不全面和經(jīng)驗的欠缺。 在程序編寫和解決問題時,每一個細節(jié)都很重要,既要避免功能的重復也要避免功能疏漏的地方。理論和實踐相結(jié)合是學好數(shù)據(jù)結(jié)構(gòu)的關(guān)鍵,這次的課設既培養(yǎng)了我們的自學能力,也提高了我們的學習興趣。九、 源程序#includ
19、e <string.h> #include <stdio.h> #include <malloc.h>#include <stdlib.h>#define max 20000typedef struct arccellint adj; /* 相鄰接的景點之間的路程 */arccell; /* 定義邊的類型 */typedef struct vertextypeint number; /* 景點編號 */ char sight100; /* 景點名稱 */ char description1000; /* 景點描述 */vertextype; /*
20、 定義頂點的類型 */typedef structvertextype vex20; /* 圖中的頂點,即為景點 */ arccell arcs2020; /* 圖中的邊,即為景點間的距離 */ int vexnum,arcnum; /* 頂點數(shù),邊數(shù) */mgraph; /* 定義圖的類型 */file *fp,*count ; /*變量類型聲明,聲明fp是file型指針,用于指向file類型 */mgraph g; /* 把圖定義為全局變量 */char nameofschool100; /*學校名稱*/ int num=9;int p2020; /* 用來存放圖中的邊 */int p20
21、; /*全局數(shù)組,用來存放路徑上的各頂點*/int visited20; /*全局數(shù)組,用來記錄各頂點被訪問的情況*/int a=0; /*全局變量,用來記錄每對頂點之間的所有路徑的條數(shù)*/long int d20; /* 輔助變量存儲最短路徑長度 */ void createudn(int v,int a); /* 造圖函數(shù) */void narrate(); /*說明函數(shù)*/void shortestpath(int num); /*最短路徑函數(shù)*/void output(int sight1,int sight2); /*輸出函數(shù)*/int menu(); /* 主菜單 */void s
22、earch(); /* 查詢景點信息 */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); /*確定路徑上第k+1個頂點的序號*/void nextvalue(int); void display(); /* 顯示遍歷結(jié)果 */int addnewsight(int n); /*添加新的景
23、點和路徑*/int deletesight(); /*刪除景點和路徑*/void changesight(); /*修改景點和路徑*/int changemenu(); /*修改路徑或頂點的選擇菜單*/int sightmenu(); /*選擇需該景點的菜單*/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
24、請選擇起點景點(0%d):",num-1); scanf("%d",&v0); printf("ttt請選擇終點景點(0%d):",num-1); scanf("%d",&v1); shortestpath(v0); /* 計算兩個景點之間的最短路徑 */ output(v0,v1); /* 輸出結(jié)果 */ printf("nntttt請按任意鍵繼續(xù).n"); getchar(); getchar();break; case 3:system("cls"); narra
25、te(); searchpath1(g); printf("nntttt請按任意鍵繼續(xù).n"); getchar(); getchar(); break;case 4: system("cls"); narrate(); num=addnewsight(num); system("cls"); narrate(); break;case 5: num=deletesight(); break;case 6:changesight(); break;while(ck!=0); int menu() /* 主菜單 */ int c; in
26、t flag; do flag=1; system("cls"); narrate(); printf("ntttn"); printf("ttt n"); printf("ttt 1、查詢景點信息 n"); printf("ttt 2、查詢兩景點間最短路徑 n"); printf("ttt 3、查詢兩景點間所有路線 n"); printf("ttt 4、添加新的景點和路徑 n"); printf("ttt 5、刪除已有景點和路徑 n"
27、); printf("ttt 6、修改已有景點或路徑 n"); printf("ttt 0、退出 n"); printf("ttt n"); printf("tttn"); printf("tttt請輸入您的選擇:"); 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;
28、 do flag=1; system("cls"); narrate(); printf("ntttn"); printf("ttt n"); printf("ttt 1、按照景點編號查詢 n"); printf("ttt 2、按照景點名稱查詢 n"); printf("ttt 0、返回 n"); printf("ttt n"); printf("tttn"); printf("tttt請輸入您的選擇:"); sca
29、nf("%d",&c); if(c=1|c=2|c=0) flag=0; while(flag); return c;void search() /* 查詢景點信息函數(shù) */ int num; int i; int c; char name20; fp=fopen("guide.txt","r+"); /*讀打開原文件book.txt*/ count=fopen("count.txt","r+"); /*讀寫count文件*/ do system("cls"); c=
30、searchmenu(); 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: %-25snn",g.vexi.sight,g.vexi.description); printf(&q
31、uot;nttt按任意鍵返回."); getchar(); getchar(); break; if(i=num) printf("nnttt沒有找到!"); printf("nnttt按任意鍵返回."); getchar(); getchar(); break; case 2: system("cls"); narrate(); printf("nntt請輸入您要查找的景點名稱:"); scanf("%s",name); for(i=0;i<num;i+) if(!strcmp
32、(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(); getchar(); break; while(
33、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(fp=fopen("guide.txt","a+")=null) /調(diào)用了fopen,要用fclose關(guān)閉 ticket文件保存記錄的詳細信息 printf("文件未找到n"); if(count=fo
34、pen("count.txt","w+ ")=null) /count文件保存記錄的條數(shù) fprintf(count,"0"); else fscanf(count,"%d",&num); strcpy(nameofschool,"洛陽理工學院開元校區(qū)"); g.vexnum=v; /* 初始化結(jié)構(gòu)中的景點數(shù)和邊數(shù) */ g.arcnum=a; for(i=0;i<20;+i) g.vexi.number=i; /* 初始化每一個景點的編號 */ /* 初始化每一個景點名及其景點描
35、述 */ strcpy(g.vex0.sight,"大明橋"); strcpy(g.vex0.description,"落于小河上,風景優(yōu)美"); strcpy(g.vex1.sight,"圖書館"); strcpy(g.vex1.description,"環(huán)境優(yōu)雅,充滿書香氣息,呈環(huán)形"); strcpy(g.vex2.sight,"教學樓"); strcpy(g.vex2.description,"上課和自習的地方,臨近圖書館"); strcpy(g.vex3.sight
36、,"子衿餐廳"); strcpy(g.vex3.description,"一餐廳,新裝修過的餐廳,臨近實驗樓,是男女比例最適中的餐廳"); strcpy(g.vex4.sight,"實驗a樓"); strcpy(g.vex4.description,"老師辦公室"); strcpy(g.vex5.sight,"實驗b樓"); strcpy(g.vex5.description,"計算機機房"); strcpy(g.vex6.sight,"實驗c樓"); s
37、trcpy(g.vex6.description,"電氣實驗樓"); strcpy(g.vex7.sight,"璞院餐廳"); strcpy(g.vex7.description,"第二餐廳,臨近男生宿舍,食物種類比較多"); strcpy(g.vex8.sight,"琇院餐廳"); strcpy(g.vex8.description,"第三餐廳,臨近女生宿舍樓,比較便宜"); /* 這里把所有的邊假定為20000,含義是這兩個景點之間是不可到達,極大值 */ for(i=0;i<20;+
38、i) for(j=0;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.ad
39、j=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)閉文件,但不是屏幕fprintf(count,"%d",num); fclose(count); void narrate() /* 說明函數(shù) */ int i; printf("nt*歡迎使用%s
40、校園導游程序*n",nameofschool); printf("t_n"); printf("tttt 景點名稱ttttttn"); printf("ttt_n"); 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("ttt_n");void shortestpath(int num
41、) /* 迪杰斯特拉算法最短路徑函數(shù) num為入口點的編號 */ int v,w,i,t; /* i、w和v為計數(shù)輔助變量 */ int final20; /* 輔助數(shù)組 */ int min; fp=fopen("guide.txt","r+"); /讀打開原文件book.txt count=fopen("count.txt","r+"); /讀寫count文件 for(v=0;v<num;v+) finalv=0; /* 假設從頂點num到頂點v沒有最短路徑 */ dv=g.arcsnumv.adj;/*
42、 將與之相關(guān)的權(quán)值放入d中存放 */ for(w=0;w<num;w+) /* 設置為空路徑 */ 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
43、;+w) if(!finalw) /* w頂點在v-s中 */ if(dw<min) /* w頂點離num頂點更近 */ v=w; min=dw; finalv=1; /* 離num頂點更近的v加入到s集合 */ for(w=0;w<num;+w) /* 更新當前最短路徑極其距離 */ if(!finalw&&(min+g.arcsvw.adj)<dw)/* 不在s集合,并且比以前所找到的路徑都短就更新當前路徑 */ dw=min+g.arcsvw.adj; for(t=0;t<num;t+) pwt=pvt; pww=1; fwrite(&g,
44、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; /* 將景點二賦值給a */ if(a!=sight1) /* 如果景點二不和景點一輸入重合,則進行. */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); /* 輸出景點一的名稱 */ d=sight1; /* 將景點一的編號賦值給d */ for(c=0;c<num;+c) gate:; /* 標
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年煤礦安全生產(chǎn)法律法規(guī)知識考試復習題庫及答案
- 委托二手房買賣合同的
- 國家基本藥物政策目錄及招標相關(guān)政策解讀課件
- 二零二五年度車隊租賃車輛保險及理賠合同范本3篇
- 2025年度個人擔保貸款協(xié)議書2篇
- 2025年度環(huán)保技術(shù)合資企業(yè)個人股東股權(quán)轉(zhuǎn)讓協(xié)議書4篇
- 二零二五年度工業(yè)遺產(chǎn)廠房拆遷補償與文化傳承協(xié)議2篇
- 2025年鋼材貿(mào)易居間代理服務合同范本
- 二零二五年度旅游景區(qū)景點租賃服務協(xié)議3篇
- 二零二五年度自動化倉庫租賃運營合同3篇
- 寺院消防安全培訓課件
- 比摩阻-管徑-流量計算公式
- 專題23平拋運動臨界問題相遇問題類平拋運和斜拋運動
- GB/T 42430-2023血液、尿液中乙醇、甲醇、正丙醇、丙酮、異丙醇和正丁醇檢驗
- 五年級數(shù)學應用題100道
- 西方經(jīng)濟學(第二版)完整整套課件(馬工程)
- 高三開學收心班會課件
- GB/T 33688-2017選煤磁選設備工藝效果評定方法
- 科技計劃項目申報培訓
- 591食堂不合格食品處置制度
- 黑布林繪本 Dad-for-Sale 出售爸爸課件
評論
0/150
提交評論