

下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 目錄 第一章 需求分析 . 1.1 題目分析 . 1.2 實(shí)現(xiàn)方法 . 1.2.1 圖的實(shí)現(xiàn)和聲明 . 1.2.2 程序功能的實(shí)現(xiàn) . 第二章 系統(tǒng)功能模塊設(shè)計(jì) . 第三章 流程圖 . . 第四章 運(yùn)行調(diào)試 . 第五章 實(shí)驗(yàn)總結(jié) . 第六章 致謝 . . 附錄一 . . 附錄二 . . 1 2 2 2 3 4 5 6 9 9 錯(cuò)誤! 未定義書簽。 錯(cuò)誤! 未定義書簽。 交通咨詢模擬 第一章 需求分析 設(shè)計(jì)、實(shí)現(xiàn)一個(gè)全國(guó)大城市間的交通咨詢程序,為旅客提供三種最優(yōu)決策 方案:一是建立交通網(wǎng)絡(luò)圖的存儲(chǔ)結(jié)構(gòu),二實(shí)現(xiàn)兩個(gè)城市間的最短路經(jīng)問(wèn)題。 程序所具有的功能特色本程序主要目的是為了給用戶提供路徑咨詢
2、。實(shí)現(xiàn)了幫 助用戶了解全國(guó)各大城市間往來(lái)的最短路徑問(wèn)題,第二,可以提供用戶查詢各 大城市的相關(guān)信息。本程序最大的特點(diǎn)是支持用戶自己添加城市信息及城市, 或添加城市的路徑,既就有可擴(kuò)展性。 該程序所做的工作的是模擬全國(guó)交通咨詢,為旅客提供三種最優(yōu)決策的交 通咨詢。此程序規(guī)定: (1) 在程序中輸入城市名稱時(shí),需輸入 10 個(gè)字母以內(nèi)的字母串;輸入列 車或飛機(jī)編號(hào)時(shí)需輸入一個(gè)整型數(shù)據(jù);輸入列車或飛機(jī)的費(fèi)用時(shí)需輸入一個(gè)實(shí) 型數(shù)據(jù); 輸入列車或飛機(jī)開始時(shí)間和到達(dá)時(shí)間時(shí)均需輸入兩個(gè)整型數(shù)據(jù) (以 hh: mm 的形式);在選擇功能時(shí),應(yīng)輸入與所選功能對(duì)應(yīng)的一個(gè)整型數(shù)據(jù)。 ( 2) 程序的輸出信息主要是:
3、最快需要多少時(shí)間才能到達(dá),或最少需要 多少旅費(fèi)才能到達(dá),或最少需要多少次中轉(zhuǎn)到達(dá),并詳細(xì)說(shuō)明依次于何時(shí)乘坐 哪一趟列車或哪一次班機(jī)到何地。 ( 3) 程序的功能包括:提供對(duì)城市信息的編輯,提供列車時(shí)刻表和飛機(jī) 航班表的編輯,提供三種最優(yōu)決策:最快到達(dá)、最省錢到達(dá)、最少中轉(zhuǎn)次數(shù)到 達(dá)。1.1 題目分析 1通過(guò)對(duì)題目的分析知,是要讓我們能夠通過(guò)利用所學(xué)的數(shù)據(jù)結(jié)構(gòu)的基本 知識(shí)和技能來(lái)解決程序設(shè)計(jì)問(wèn),因此在搞程序設(shè)計(jì)之前先好好的把書復(fù)習(xí)一遍, 弄清楚各個(gè)知識(shí)之間的聯(lián)系。 2由題目的分析知全國(guó)交通咨詢管理系統(tǒng)是有對(duì)城市信息的增加、刪除、 修改、保存、查詢、有錯(cuò)時(shí)提示出錯(cuò)信息等功能,最后對(duì)數(shù)據(jù)進(jìn)行保存并退
4、出 操作系統(tǒng)。由此可知需要將函數(shù)模塊化,將它做為一個(gè)獨(dú)立的函數(shù)體去實(shí)現(xiàn)它 的功能。它可以分為四大功能模塊,每個(gè)模塊需要去各個(gè)擊破。其中可能用到 C+語(yǔ)言的指針與鏈表,因此,要先去復(fù)習(xí)一下 C+語(yǔ)言課本。 3根據(jù)這些功能和基本要求,可充分運(yùn)用我們所學(xué)的數(shù)據(jù)結(jié)構(gòu)的基本知識(shí) 和技能去逐步的解決。其中將函數(shù)進(jìn)行模塊化。在數(shù)據(jù)結(jié)構(gòu)中,通過(guò)隊(duì)列,棧, 圖的聲明來(lái)實(shí)現(xiàn)系統(tǒng)的各種功能的存儲(chǔ)各城市之間乘火車的消耗價(jià)格,時(shí)間, 乘飛機(jī)的價(jià)格,時(shí)間,以及中轉(zhuǎn)站最少。利用指針和結(jié)點(diǎn)來(lái)實(shí)現(xiàn)城市與城市之 間各種操作,而這些知識(shí)點(diǎn)都是我們學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)必須掌握和學(xué)會(huì)運(yùn)用的。 4完成程序功能的設(shè)置后,應(yīng)對(duì)程序進(jìn)行調(diào)試,以便在調(diào)
5、試中能及時(shí)地找 出錯(cuò)誤并加以更正,這樣能使程序功能進(jìn)一步的完善和正確。這就要求我們?cè)?編程和調(diào)試過(guò)程中養(yǎng)成認(rèn)真分析和善于發(fā)現(xiàn)問(wèn)題并及時(shí)解決的習(xí)慣, 不懂的及 時(shí)問(wèn)老師或者其他同學(xué)。 1.2 實(shí)現(xiàn)方法 1.2.1 圖的實(shí)現(xiàn)和聲明 ( 1)利用帶權(quán)圖,構(gòu)建交通網(wǎng)絡(luò)圖 (2)根據(jù)題目要求,聲明了一個(gè)圖形的數(shù)據(jù)結(jié)構(gòu)用來(lái)存儲(chǔ)任意幾個(gè)城市之 間的各種信息,其中是把它們的 TTime; TPrice; FTime; FPrice; 的各種信息用 鄰接矩陣存儲(chǔ)起來(lái)的。同時(shí)運(yùn)用構(gòu)造函數(shù),利用特定的值來(lái)構(gòu)造對(duì)象。 ( 3)struct City 圖的結(jié)構(gòu), CreateCity 建立鄰接圖, AddCity 增加
6、, DelCity 刪除, EditCity 修改, ShortestPath 最小路徑, ShortestPath_DIJ 求源點(diǎn) v0 到各點(diǎn)的最短路徑 1 火車時(shí)間最小 ,2 火車金錢最小 ,3 飛機(jī)時(shí)間最小 ,4 飛機(jī)金 錢最小,來(lái)實(shí)現(xiàn)的。 1.2.2 程序功能的實(shí)現(xiàn) ( 1)全國(guó)交通咨詢信息錄入和增加的實(shí)現(xiàn) 主要是對(duì)城市基本信息的輸入,包括(乘火車的價(jià)格,乘火車的時(shí)間,乘 飛機(jī)的價(jià)格,乘飛機(jī)的時(shí)間,中轉(zhuǎn)站次數(shù)最少)在程序中只要用 AddCity ( 輸入 函數(shù) ) 和 ShortestPath(C); 來(lái)實(shí)現(xiàn)。 ( 2)全國(guó)交通咨詢信息顯示的實(shí)現(xiàn) 主要為用戶 ShortestPath
7、(C); 函數(shù)顯示城市之間的基本信息,包括上面錄入 的信息和增加的內(nèi)容。 ( 3)全國(guó)交通咨詢信息載入文件的實(shí)現(xiàn) 在程序中用 LoadCity(C);break ()函數(shù)來(lái)載入文件。 ( 4)全國(guó)交通咨詢信息刪除的實(shí)現(xiàn) 在程序中用 DelCity(C) 函數(shù)來(lái)實(shí)現(xiàn)對(duì)有錯(cuò)的信息進(jìn)行刪除。 ( 5)全國(guó)交通咨詢信息修改的實(shí)現(xiàn) 在程序中用 EditCity(C) (修改函數(shù))來(lái)實(shí)現(xiàn),而且可通過(guò)按編號(hào)或城市名 來(lái)修改,當(dāng)找不到要修改的內(nèi)容時(shí)提示用戶可能輸入有誤,重新在輸一遍。 ( 6)全國(guó)交通咨詢信息的重來(lái) CreateCity(C);break 重來(lái),實(shí)現(xiàn)對(duì)錯(cuò)誤的從新輸入。 ( 7)全國(guó)交通咨詢信息
8、的保存 在程序中用 SaveCity(C) 保存函數(shù)來(lái)實(shí)現(xiàn),并提示用戶數(shù)據(jù)已保存。 ( 8)全國(guó)交通咨詢信息的增加 ShowCityDat(C);break , case 2:AddCity(C);break 增加。 第二章系統(tǒng)功能模塊設(shè)計(jì) 該課題可以分為如下幾個(gè)模塊:控制選擇功能項(xiàng)的 main 函數(shù)、建立鄰接 圖的 CreateCity(City *C)函數(shù)、 增加城市的 AddCity(City *C)函數(shù)、 刪除城市的 DelCity(City *C)函數(shù)、修改資料的 EditCity(City *C)函數(shù)、求最小路徑的 ShortestPath(City *C)函數(shù)、求其他最值的 Sh
9、ortestPath_DIJ(City *C,int vO,int k) 函數(shù)、載入文件資料的 LoadCity(City *C)函數(shù)、保存資料的 SaveCity(City *C) 函數(shù)、顯示城市之間關(guān)系數(shù)據(jù)的 ShowCityName(City *C,i nt k)函數(shù)。 模塊圖如下: 圖 1-1 這個(gè)程序由三部分組成: 管理員: 這個(gè)模塊包含了創(chuàng)建交通網(wǎng)跟增加城市兩個(gè), 它是這 個(gè)程序往下運(yùn)行的前提。 用戶:這個(gè)模塊的是屬于用戶的在創(chuàng)建好的交通網(wǎng)上選擇自己的需求。 顯示交通網(wǎng):這個(gè)模塊是計(jì)算機(jī)的運(yùn)算,運(yùn)算出來(lái)的是用戶想要的結(jié)果。 第三章流程圖 圖 2 系統(tǒng)流程圖 開始運(yùn)行程序,輸入命令,
10、進(jìn)入各種不同的功能區(qū),進(jìn)行各自的功能,分 別運(yùn)行,然后輸出結(jié)果。結(jié)束后,如果退出就結(jié)束,不退出重復(fù)上面的功能 第四章運(yùn)行調(diào)試 登陸界面:管理界面中有 3 大模塊即我們說(shuō)的三大功能 現(xiàn)住 喈您選揮滾的耳沿; ,顯示交通網(wǎng)(用矩陣形式) B退出 請(qǐng)選擇:. 圖 3 登陸界面 進(jìn)入管理員模式進(jìn)行城市交通網(wǎng)絡(luò)的創(chuàng)建:在這個(gè)模塊中我們選擇 1 創(chuàng)建 城市數(shù)目是 3 分別為 a b、c設(shè) ab 間的路程是 20, ac 的潞城市 30, bc 的路 程是 40 創(chuàng)建建通網(wǎng)絡(luò)圖。 這塊是用戶模式,在用戶進(jìn)入系統(tǒng)之后,進(jìn)行查詢:在用戶中我們輸入 1 咨詢兩個(gè)城市間的信息再次選擇 1 咨詢最短的路程 a 到 a
11、 ,a 到 b 的,a 到 c 的。在界面輸入 1 的前提下分別輸入 2,3。結(jié)果如下:詈目 :1域帀籐 自5 亠一環(huán) IJIJ 的 市A A 奧?:歡迎-is 聖取 - -m m m m - - 之之疋單 1 1J JI I 兩 KE 上二兩b b 詢?cè)冊(cè)兓負(fù)袢?瞥苕七缶選輸帀帀徑次屠套選輸帀股吳日議選 i i 2 2 3 3 市 * :篇票 常車 寥少 口取 的的的 -日m-* 乙單 帀M M- - btt -1 1 市 城 5 5 幣 城篇票 0 0 7T 為葫少 冒販 nr HHH-JnHH/nMH IFm mA A 一 m2m. 單 的帀帀帀菜 圖 7 咨詢信息界面 ,兩兩兩卜-兩匚
12、酗兩兩兩上- 為詢?cè)冊(cè)兓負(fù)袢? 2; ;詢?cè)兓負(fù)?駆憑啞L里面有個(gè)路找的長(zhǎng)度. 鳥第書應(yīng)的車票 B逗示s陵瞇應(yīng)的肘何長(zhǎng)度 丘返叵上一規(guī)蕖單 翩辭:i a B 1S0 160 逼長(zhǎng)廈 MH W MEM 3S 鈿 3 M顯71口土 卜顯示脊損制弄應(yīng)的車票 顯示需謝瞇應(yīng)的時(shí)間長(zhǎng)度 請(qǐng)堰擇:2 G 100 160 a 1 0 a 130 1E0 160 圖 8 交通信息網(wǎng)的的結(jié)果 第五章 實(shí)驗(yàn)總結(jié) 第六章 致謝 附錄一 1 數(shù)據(jù)結(jié)構(gòu) C 語(yǔ)言版 嚴(yán)蔚敏、吳偉民,清華大學(xué)出版社, 2002 2 數(shù)據(jù)結(jié)構(gòu)課程實(shí)驗(yàn) 徐孝凱,清華大學(xué)出版社, 2002 3 數(shù)據(jù)結(jié)構(gòu)程序設(shè)計(jì)題典 李春葆,清華大學(xué)出版社, 20
13、02 / /鄰接矩陣類 /#include #ifndef ADJMATRIX_H #define ADJMATRIX_H #include #include using namespace std; const int MaxValue=100;/ 最大值/* * / / 交通咨詢系統(tǒng) / / / /* * / 附錄二 struct EdgeType int iDistance;/ 路程 int iCost; / 費(fèi)用 float fTime; / 所花費(fèi)的時(shí)間 ; /城市結(jié)構(gòu)體,包括城市名字以及城市在圖中的編號(hào) struct City int Number; char *Name; ; /
14、交通網(wǎng)絡(luò)圖,有 iVexNum 個(gè)城市,城市之間有 iEdgNum 條路線,每條路線上的時(shí)間路程 費(fèi)用為 /RouteMaxValueMaxV alue class AdjMatrix public: /AdjMatrix();/ 圖的初始化,構(gòu)造函數(shù) AdjMatrix(int n); int GetVexNum();/ 取得交通圖的城市個(gè)數(shù) int GetEdgNum();/ 取得交通圖的路線數(shù)目 char* GetCityName (const int i);/ 通過(guò)序號(hào)取得城市的名字 int GetCityNum(char* cityname);/ 通過(guò)城市名字取得城市的編號(hào) /Edg
15、eType GetRoute (const int v1,const int v2); void Check(int &i,int &j);/ 檢查輸入的邊的序號(hào)是否越界,若越界就重輸 void CreateGraph();/ 構(gòu)造交通圖 void ShowRouteLength();/ 向用戶顯示路程長(zhǎng)度 void ShowRouteCost();/ 向用戶顯示路程車票 void ShowRouteTime();/ 向用戶顯示路程時(shí)間 void Dijkstra(int v,int dist,int path);/ 求一個(gè)源點(diǎn)到其他點(diǎn)的最短性質(zhì) void DijkstraSh
16、ortDistance();/ 一個(gè)城市到其他城市的最短距離 void DijkstraLessTime();/ 一個(gè)城市到其他城市的最少時(shí)間 void DijkstraLessCost();/ 一個(gè)城市到其他城市的最少花費(fèi) void Floyd(int distMaxValueMaxValue,int pathMaxValueMaxValue); /兩個(gè)點(diǎn)之間的最短性質(zhì) void FloydShortDistance();/ 兩個(gè)城市之間的最段距離 void FloydLessTime();/ 兩個(gè)城市之間的最少時(shí)間 void FloydLessCost();/ 兩個(gè)城市之間的最少花費(fèi) pr
17、ivate: int iVexNum;/ 頂點(diǎn)數(shù),即城市個(gè)數(shù) int iEdgNum;/ 邊數(shù),即城市間的路線 City cityMaxValue;/ 圖的頂點(diǎn),即城市 EdgeType RouteMaxValueMaxValue;/ 各邊的權(quán)值,即路線的時(shí)間費(fèi)用以及路程 ; #endif /AdjMatrix.cpp /#include AdjMatrix.h void PrintGr* 供測(cè)試用 #include using namespace std; AdjMatrix:AdjMatrix(int n)/ 初始化有 n 個(gè)頂點(diǎn)的鄰接矩陣 for(int i=0;in;i+) for(i
18、nt j=0;jn;j+) if(i=j) Routeij.fTime=0; Routeij.iCost=0; Routeij.iDistance=0; else Routeij.fTime=MaxValue; Routeij.iCost=MaxV alue; Routeij.iDistance=MaxValue; iVexNum=iEdgNum=0; int AdjMatrix:GetVexNum() return iVexNum; int AdjMatrix:GetEdgNum() return iEdgNum; char* AdjMatrix:GetCityName(const int
19、i)/ 取城市的名字 if(iiVexNum) cerr 參數(shù)越界,發(fā)生錯(cuò)誤了! endl; exit(1); return cityi.Name; int AdjMatrix:GetCityNum(char* cityname) for(int i=1;i=iVexNum;i+) if (strcmp(cityi.Name,cityname)=0) return cityi.Number; cerr 您輸入的城市有錯(cuò)誤 endl; return -1; void AdjMatrix:PrintGragh()/ 將圖打印出來(lái),最初測(cè)試之用 for(int i=0;iiVexNum;i+) fo
20、r(int j=0;jiVexNum;j+) if(100=Routei+1j+1.iDistance) Routei+1j+1.iDistance=1000; coutRoutei+1j+1.iDistancet coutendl; void AdjMatrix:Check(int &i,int &j)/ 檢查輸入的邊的序號(hào)是否越界,若越界就重輸 while(1) if(iiVexNum|jiVexNum) cerr 參數(shù)越界,發(fā)生錯(cuò)誤了 ,請(qǐng)重輸! ij; /done/ void AdjMatrix:CreateGraph() /為了方便真是先把時(shí)間跟費(fèi)用這兩個(gè)權(quán)值給屏蔽掉
21、了 City city1,city2; int time,distance,cost; char flag=y; char *ch=new char(10); coutiVexNum; cout 輸入城市的信息: endl; for(int i=1;i=iVexNum;i+) cout 序號(hào) i 的; coutcityi.Name; cityi.Number=i; cout 請(qǐng)輸入路線的數(shù)目: iEdgNum; for(i=0;iiEdgNum;i+) cout 輸入兩個(gè)城市的信息: endl; / coutcity1.Number; coutcity1.Name; / cout 序號(hào)是 Ge
22、tCityNum(city1.Name)endl; / coutcity2.Number; city1.Number=GetCityNum(city1.Name); coutcity2.Name; city2.Number=GetCityNum(city2.Name); /cout 序號(hào)是 GetCityNum(city2.Name)endl; / couttime; / Routecity1.Numbercity2.Number.fTime=time; / Routecity2.Numbercity1.Number.fTime=time; / coutcost; / Routecity1.N
23、umbercity2.Number.iCost=cost; / Routecity2.Numbercity1.Number.iCost=cost; coutdistance; Routecity1.Numbercity2.Number.iDistance=distance; / Routecity2.Numbercity1.Number.iDistance=distance; /* 可以保存到相應(yīng)的文件 FILE *fp1,*fp2; if(fp1=fopen(city.txt,wb)=NULL) printf( 無(wú)法打開文件 !n); return; for(int j=1;j,cityj.
24、Number); fprintf(fp1,%s ,cityj.Name); fprintf(fp1,n); fclose(fp1); if(fp2=fopen(info.txt,wb)=NULL) printf( 無(wú)法打開文件 !n); return; for(j=1;j=iEdgNum;j+) fprintf(fp2,%d.distance: %d,cost: %d,time: %f,j, Routecity1.Numbercity2.Number.iDistance, Routecity1.Numbercity2.Number.iCost, Routecity1.Numbercity2.N
25、umber.fTime); fclose(fp2); */ return; void AdjMatrix:ShowRouteLength()/ 向用戶顯示各個(gè)城市之間路程長(zhǎng)度 coutt; for(int i=1;i=iVexNum;i+) coutcityi.Namet; coutendl; for(i=1;i=iVexNum;i+) coutcityi.Namet; for(int j=1;j=iVexNum;j+) coutRouteij.iDistancet; coutendl; void AdjMatrix:ShowRouteCost()/ 向用戶顯示各個(gè)城市之間路程車票 coutt
26、; for(int i=1;i=iVexNum;i+) coutcityi.Namet; coutendl; for(i=1;i=iVexNum;i+) coutcityi.Namet; for(int j=1;j=iVexNum;j+) coutRouteij.iCostt; coutendl; void AdjMatrix:ShowRouteTime()/ 向用戶顯示各個(gè)城市之間路程時(shí)間 coutt; for(int i=1;i=iVexNum;i+) coutcityi.Namet; coutendl; for(i=1;i=iVexNum;i+) coutcityi.Namet; for
27、(int j=1;j=iVexNum;j+) coutRouteij.fTimet; coutendl; void AdjMatrix:Dijkstra(int v0,int dist,int path)/ 求一個(gè)源點(diǎn)到其他點(diǎn)的最短距離 /函數(shù)里面城市圖的權(quán)值還是先展示用的兩地路程 即 iDistance int mindis; int *s=new int(10); int u; for(int i=1;i=iVexNum;i+) disti=Routev0i.iDistance; si=0; if(i!=v0&distiMaxValue) pathi=v0; else pathi=
28、-1; distv0=0; sv0=1; for(i=1;iiVexNum;i+) mindis=MaxValue; for(int j=1;j=iVexNum;j+) if(0=sj&distjmindis) u=j; mindis=distj; if(mindis=MaxValue) return; su=1; for(int w=1;w=iVexNum;w+) if (0=sw&Routeuw.iDistanceMaxValue&distu+Routeuw.iDistancedistw) distw=distu+Routeuw.iDistance; pathw=u
29、; void AdjMatrix:DijkstraShortDistance()/ 求一個(gè)城市到其他城市的最短路程 /然后將這個(gè)路線打印出來(lái),不過(guò)是倒著打的,要正打的話可以用一個(gè)棧來(lái)實(shí)現(xiàn) char *cityname=new char; coutcityname; int v0=GetCityNum(cityname); int *dist=new intiVexNum; int *path=new intiVexNum; Dijkstra(v0,dist,path); cout 從 cityname 城市到其他城市的最短路程為: endl; for(int i=1;i=iVexNum;i+)
30、 cout 到城市 GetCityName(i) 的最短距離為 distin; if(pathi!=-1) cout 路徑為 GetCityName(i)-; int x=pathi; while(x!=v0) coutGetCityName(x)-; x=pathx; coutcityname; coutendl; else coutendl; void AdjMatrix:DijkstraLessTime() char *cityname=new char; coutcityname; int v0=GetCityNum(cityname); int *dist=new intiVexNu
31、m; int *path=new intiVexNum; Dijkstra(v0,dist,path); cout 從 cityname 城市到其他城市的最少時(shí)間為: n; for(int i=1;i=iVexNum;i+) cout 到城市 GetCityName(i) 的最少時(shí)間為 distiendl; void AdjMatrix:DijkstraLessCost() char *cityname=new char; coutcityname; int v0=GetCityNum(cityname); int *dist=new intiVexNum; int *path=new int
32、iVexNum; Dijkstra(v0,dist,path); cout 從 cityname 城市到其他城市的最少花費(fèi)為: n; for(int i=1;i=iVexNum;i+) cout 到城市 GetCityName(i) 的最少花費(fèi)為 distiendl; void AdjMatrix:Floyd(int distMaxValueMaxValue,int pathMaxV /求一個(gè)源點(diǎn)到其他點(diǎn)的最短距離 /函數(shù)里面城市圖的權(quán)值還是先展示用的兩地路程 即 iDistance int i,j,k; for(i=1;i=iVexNum;i+) for(j=1;j=iVexNum;j+)
33、distij=Routeij.iDistance; if(i!=j&distij!=MaxValue) pathij=i; else if(i=j) pathij=0; else pathij=-1; for(k=1;k=iVexNum;k+) alueMaxValue) for(i=1;i=iVexNum;i+) for(j=1;j(distik+distkj) distij=distik+distkj; pathij=pathkj; void AdjMatrix:FloydShortDistance()/ 求一個(gè)城市到其他城市的最短路程 /然后將這個(gè)路線打印出來(lái),不過(guò)是倒著打的,要
34、正打的話可以用一個(gè)棧來(lái)實(shí)現(xiàn) char *cityname1=new char; char *cityname2=new char; int distMaxValueMaxValue; int pathMaxValueMaxV alue; cout 請(qǐng)輸入兩個(gè)城市: ; coutcityname1; coutcityname2; int i= GetCityNum(cityname1); int j= GetCityNum(cityname2); Floyd( dist, path); cout 城市 cityname1 到城市 cityname2 的最短路徑為 distijendl; if(p
35、athij!=-1) cout 路徑為: cityname2-; int x=pathij; while(x!=i) coutGetCityName(x)-; x=pathix; coutcityname1; coutendl; else coutendl; void AdjMatrix:FloydLessTime() char *cityname1=new char; char *cityname2=new char; cout 請(qǐng)輸入兩個(gè)城市: ; coutcityname1; coutcityname2; int i= GetCityNum(cityname1); int j= GetC
36、ityNum(cityname2); int distMaxValueMaxValue; int pathMaxValueMaxV alue; Floyd( dist, path); cout 城市 cityname1 到城市 cityname2 的最少時(shí)間為 distijendl; void AdjMatrix:FloydLessCost() char *cityname1=new char; char *cityname2=new char; cout 請(qǐng)輸入兩個(gè)城市: ; coutcityname1; coutcityname2; int i= GetCityNum(cityname1)
37、; int j= GetCityNum(cityname2); int distMaxValueMaxValue; int pathMaxValueMaxV alue; Floyd( dist, path); cout 城市 cityname1 到城市 cityname2 的最少花費(fèi)為 distijendl; /* /最初的代碼。后來(lái)舍棄了 void AdjMatrix:CreateCity() int i=0,tempnumber=0; char temp=y; coutCityi+; cout 繼續(xù)輸入 (y/n)?temp; cout 請(qǐng)輸入城市名字 : ; tempnumber+; c
38、outendl; iVexNum=tempnumber; void AdjMatrix:CreateRoute() char *city1; char *city2; int cost; int time2; int distance; cout 請(qǐng)輸入各路線信息 endl; coutcity1; coutcity2; coutdistance; coutcost; cout 開車時(shí)間: ; scanf(%d:%d,&time0,&time1); while(time0=24|time1=60) coutn 時(shí)間輸入錯(cuò)誤,請(qǐng)重輸 !endl; scanf( %d:%d, &am
39、p;time0, &time1 ); cout 到達(dá)時(shí)間: ; scanf(%d:%d,&time0,&time1); while(time0=24|time1=60) coutn 時(shí)間輸入錯(cuò)誤,請(qǐng)重輸 !endl; scanf( %d:%d, &time0, &time1 ); EdgeType AdjMatrix:GetRoute(const int v1,const int v2)/ 取權(quán)值 if(v1iVexNum|v2iVexNum) cerr 參數(shù)越界,發(fā)生錯(cuò)誤了! endl; exit(1); return Routev1v2; */ /m
40、ain.cpp #include /#include AdjMatrix.h using namespace std; AdjMatrix Gragh(10); /done/ void Administrator() / 管理員管理項(xiàng)目的界面 /里面包括城市網(wǎng)絡(luò)的初始化,以及增加城市等功能 int i; coutendl; cout* 這里是管理員的界面,歡迎進(jìn)入 *endl; cout1= 創(chuàng)建城市交通網(wǎng)絡(luò) endl 2= 增加城市 endl 0= 返回上一級(jí)菜單 endl; couti; while(i!=0) switch(i) case 1:Gragh.CreateGraph();br
41、eak; case 2:;break;增加城市尚未實(shí)現(xiàn)(*A_A*) cout1= 創(chuàng)建城市交通網(wǎng)絡(luò) endl 2= 增加城市 endl 0= 返回上一級(jí)菜單 endl; couti; return; /done/ void OnetoAnotherInfo()/ 一個(gè)城市到其他城市信息的查詢 int i; coutendl; cout1= 咨詢一個(gè)城市到其他城市的最短路徑 endl 2= 咨詢一個(gè)城市到其他城市的最少時(shí)間 endl 3= 咨詢一個(gè)城市到其他城市的最少車票 endl 0= 返回上一級(jí)菜單 endl; couti; while(i!=0) switch(i) case 1:Gra
42、gh.DijkstraShortDistance();break; case 2:Gragh.DijkstraLessTime();break; case 3:Gragh.DijkstraLessCost();break; cout1= 咨詢一個(gè)城市到其他城市的最短路徑 endl 2= 咨詢一個(gè)城市到其他城市的最少時(shí)間 endl 3= 咨詢一個(gè)城市到其他城市的最少車票 endl 0= 返回上一級(jí)菜單 endl; couti; return; void TwoCityInfo()/ 兩個(gè)城市之間的信息查詢 int i; coutendl; cout1= 咨詢兩個(gè)城市之間的最短路程 endl 2= 咨詢兩個(gè)城市之間的最少時(shí)間 endl 3= 咨詢兩個(gè)
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 測(cè)量實(shí)習(xí)自我鑒定范文(18篇)
- 遼寧工程職業(yè)技術(shù)學(xué)院數(shù)學(xué)復(fù)習(xí)試題(一)
- 新家風(fēng)家訓(xùn)心得(16篇)
- 領(lǐng)導(dǎo)科學(xué)的核心理念與實(shí)踐試題及答案
- 企業(yè)形象規(guī)定(完整版)
- 獎(jiǎng)學(xué)金自我鑒定范文(28篇)
- 電子商務(wù)安全與支付行業(yè)試題集
- 成就數(shù)據(jù)庫(kù)夢(mèng)想2025年試題及答案
- 市場(chǎng)推廣及渠道分銷合同
- 農(nóng)民合作社農(nóng)業(yè)生產(chǎn)設(shè)備采購(gòu)合同
- 護(hù)理查房慢性腎臟病5期護(hù)理查房
- 鉆越保阜高速公路施工方案
- GMS基礎(chǔ)知識(shí)的教案
- 第5章 鋼梁計(jì)算原理
- 西南科技大學(xué)機(jī)械原理期末考試復(fù)習(xí)題及答案
- 讀后續(xù)寫:騎馬迷路 遇困難不放棄 課件 【知識(shí)建構(gòu)+點(diǎn)播拓展】高考英語(yǔ)作文備考
- 2023年宜興市云湖茶禪文旅發(fā)展有限公司招聘筆試題庫(kù)及答案解析
- Unit2Reading2知識(shí)點(diǎn)課件-高中英語(yǔ)牛津譯林版(2020)選擇性必修第一冊(cè)
- 交通協(xié)管員勞務(wù)外包服務(wù)方案
- 頂管工程頂進(jìn)記錄表
- 呼吸道病原體抗體檢測(cè)及臨床應(yīng)用課件
評(píng)論
0/150
提交評(píng)論