![數(shù)據(jù)結(jié)構(gòu)與OOP景區(qū)旅游信息管理系統(tǒng)-_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/7/b3ff2d93-c7bc-42f9-aaff-901e45253c6b/b3ff2d93-c7bc-42f9-aaff-901e45253c6b1.gif)
![數(shù)據(jù)結(jié)構(gòu)與OOP景區(qū)旅游信息管理系統(tǒng)-_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/7/b3ff2d93-c7bc-42f9-aaff-901e45253c6b/b3ff2d93-c7bc-42f9-aaff-901e45253c6b2.gif)
![數(shù)據(jù)結(jié)構(gòu)與OOP景區(qū)旅游信息管理系統(tǒng)-_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/7/b3ff2d93-c7bc-42f9-aaff-901e45253c6b/b3ff2d93-c7bc-42f9-aaff-901e45253c6b3.gif)
![數(shù)據(jù)結(jié)構(gòu)與OOP景區(qū)旅游信息管理系統(tǒng)-_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/7/b3ff2d93-c7bc-42f9-aaff-901e45253c6b/b3ff2d93-c7bc-42f9-aaff-901e45253c6b4.gif)
![數(shù)據(jù)結(jié)構(gòu)與OOP景區(qū)旅游信息管理系統(tǒng)-_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/7/b3ff2d93-c7bc-42f9-aaff-901e45253c6b/b3ff2d93-c7bc-42f9-aaff-901e45253c6b5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、/*15、景區(qū)旅游信息管理系統(tǒng)【問(wèn)題描述】在旅游景區(qū),經(jīng)常會(huì)遇到游客打聽(tīng)從一個(gè)景點(diǎn)到另一個(gè)景點(diǎn)的最短路徑和最短距離,這類游客不喜歡按照導(dǎo)游圖的線路來(lái)游覽,而是挑選自己感興趣的景點(diǎn)游覽。為于幫助這類游客信息查詢,就需要計(jì)算出所有景點(diǎn)之間最短路徑和最短距離。算法采用迪杰斯特拉算法或弗洛伊德算法均可。建立一個(gè)景區(qū)旅游信息管理系統(tǒng),實(shí)現(xiàn)的主要功能包括制訂旅游景點(diǎn)導(dǎo)游線路策略和制訂景區(qū)道路鋪設(shè)策略。任務(wù)中景點(diǎn)分布是一個(gè)無(wú)向帶權(quán)連通圖,圖中邊的權(quán)值是景點(diǎn)之間的距離。 (1)景區(qū)旅游信息管理系統(tǒng)中制訂旅游景點(diǎn)導(dǎo)游線路策略,首先通過(guò)遍歷景點(diǎn),給出一個(gè)入口景點(diǎn),建立一個(gè)導(dǎo)游線路圖,導(dǎo)游線路圖用有向圖表示。遍歷采
2、用深度優(yōu)先策略,這也比較符合游客心理。(2)為了使導(dǎo)游線路圖能夠優(yōu)化,可通過(guò)拓樸排序判斷圖中有無(wú)回路,若有回路,則打印輸出回路中的景點(diǎn),供人工優(yōu)化。(3)在導(dǎo)游線路圖中,還為一些不愿按線路走的游客提供信息服務(wù),比如從一個(gè)景點(diǎn)到另一個(gè)景點(diǎn)的最短路徑和最短距離。在本線路圖中將輸出任意景點(diǎn)間的最短路徑和最短距離。(4)在景區(qū)建設(shè)中,道路建設(shè)是其中一個(gè)重要內(nèi)容。道路建設(shè)首先要保證能連通所有景點(diǎn),但又要花最小的代價(jià),可以通過(guò)求最小生成樹(shù)(prime,克魯斯卡爾)來(lái)解決這個(gè)問(wèn)題。本任務(wù)中假設(shè)修建道路的代價(jià)只與它的里程相關(guān)?!净疽蟆勘救蝿?wù)應(yīng)有如下功能模塊:創(chuàng)建景區(qū)景點(diǎn)分布圖;輸出景區(qū)景點(diǎn)分布圖(鄰接矩陣
3、)輸出導(dǎo)游線路圖;深度優(yōu)先策略判斷導(dǎo)游線路圖有無(wú)回路;拓樸排序(查找入度大于1的景點(diǎn))求兩個(gè)景點(diǎn)間的最短路徑和最短距離;弗洛伊德算法輸出道路修建規(guī)劃圖。prime主程序用菜單選項(xiàng)供用戶選擇功能模塊。*/論文內(nèi)容包括:一、 課程設(shè)計(jì)題目:二、 課程設(shè)計(jì)內(nèi)容:三、 算法設(shè)計(jì):四、
4、 程序正確性驗(yàn)證(指邊界測(cè)試數(shù)據(jù),即程序?qū)τ诰倪x擇的典型、苛刻而帶有刁難性的幾組輸入數(shù)據(jù)能夠得出滿足要求的結(jié)果):五、 課程設(shè)計(jì)過(guò)程中出現(xiàn)的主要問(wèn)題、原因及解決方法:六、 課程設(shè)計(jì)的主要收獲:七、
5、0; 對(duì)今后課程設(shè)計(jì)的建議:/代碼:#include <iostream>using namespace std;#include<conio.h>/getch#include<cstdlib>/清屏函數(shù)頭文件#define M 100#define INF 999666333/*函數(shù)聲明*/void Welcome();/歡迎界面void returnMainFace();/返回主界面函數(shù)void MainFace();/主界面void create_graph();/創(chuàng)建景區(qū)景點(diǎn)圖void print_graph();/輸出景區(qū)景點(diǎn)圖void
6、 guide_line();/導(dǎo)游線路void DFS(int c);/深度優(yōu)先搜索導(dǎo)游線路void checked();/檢查是否存在一個(gè)合法的景區(qū)景點(diǎn)分布圖void Num_Name();/打印景點(diǎn)編號(hào)與景點(diǎn)名稱的對(duì)應(yīng)信息void Floyd(int AMM,int pathMM);/Floyd算法void Y_N();/選項(xiàng)判斷函數(shù)void check_circuit();/判斷回路/*定義數(shù)據(jù)結(jié)構(gòu)*/struct Matrix int mMM;/景點(diǎn)鄰接矩陣 string PnameM;/各個(gè)景點(diǎn)的名稱;typedef struct string Sname;/景區(qū)名稱 int cou
7、nt;/景點(diǎn)總數(shù)量 int edge;/道路數(shù)量 Matrix mat;/鄰接矩陣Scenic;/*景區(qū)數(shù)據(jù)類型為全局變量*/Scenic S;/*/創(chuàng)建一個(gè)景區(qū)鄰接矩陣void create_graph() if(S.count>0) cout<<"n*當(dāng)前已存在一個(gè)景區(qū)景點(diǎn)分布圖!n*繼續(xù)操作將覆蓋該景區(qū)景點(diǎn)分布圖?。╕/N)" Y_N(); cout<<"n*請(qǐng)輸入景區(qū)的名稱:" cin>>S.Sname; cout<<"n*請(qǐng)輸入該景區(qū)的景點(diǎn)總數(shù)目:" cin>>
8、;S.count; cout<<"n*請(qǐng)輸入景區(qū)的道路總數(shù)目:" cin>>S.edge; int i,j; for(i=0;i<S.count;i+) for(j=0;j<S.count;j+) S.mat.mij=0; cout<<"n*請(qǐng)輸入道路兩邊連接的兩個(gè)景點(diǎn)編號(hào)、名稱及道路的長(zhǎng)度n" cout<<"t(格式:景點(diǎn)輸入請(qǐng)按照小號(hào)在前大號(hào)在后的原則,景點(diǎn)編號(hào)從1開(kāi)始)" for(i=0;i<S.edge;i+) cout<<"n*第 &qu
9、ot;<<i+1<<" 條道路n" int n1,n2; /編號(hào)輸入從1開(kāi)始,矩陣下標(biāo)從零開(kāi)始 cout<<"t-景點(diǎn) 1 編號(hào):" cin>>n1; n1-; cout<<"t-景點(diǎn) 1 名稱:" cin>>S.mat.Pnamen1; cout<<"t-景點(diǎn) 2 編號(hào):" cin>>n2; n2-; cout<<"t-景點(diǎn) 2 名稱:" cin>>S.mat.Pnamen2
10、; cout<<"t-兩景點(diǎn)之間的道路長(zhǎng)度:" cin>>S.mat.mn1n2; S.mat.mn2n1=S.mat.mn1n2; cout<<"n*景區(qū)創(chuàng)建成功!" returnMainFace();void print_graph()/以鄰接矩陣的形式輸出景點(diǎn)分布 checked(); cout<<"n*景區(qū)景點(diǎn)分布圖(鄰接矩陣表示)查詢成功!n" cout<<"*景區(qū)名稱:"<<S.Sname<<endl; int i,j;
11、 cout<<"nt -" for(i=0;i<S.count;i+) cout<<"-" cout<<endl; cout<<"t|編號(hào)|" /cout<<" |" for(i=0;i<S.count;i+) cout<<' '<<i+1<<' ' cout<<'|'<<endl<<"t|-" for(i
12、=0;i<S.count;i+) cout<<"-" cout<<'|'<<endl; for(i=0;i<S.count;i+) for(j=0;j<S.count;j+) if(j=0) cout<<"t| "<<i+1<<" | "<<S.mat.mij<<' ' else cout<<' '<<S.mat.mij<<'
13、39; cout<<'|'<<endl; cout<<"t -" for(i=0;i<S.count;i+) cout<<"-" Num_Name(); cout<<"注:nt'0'表示兩個(gè)景點(diǎn)間沒(méi)有直接到達(dá)的路徑,或景點(diǎn)到自身路徑不需要!n" returnMainFace();/*/深度優(yōu)先搜索導(dǎo)游線路int visitedM=0;int np=0;/找到的景點(diǎn)個(gè)數(shù)int pM;/表示各個(gè)景點(diǎn)的入度值void DFS(int c) np
14、+; pc+; if(np=S.count) cout<<S.mat.Pnamec<<endl; returnMainFace(); else cout<<S.mat.Pnamec<<" -> " visitedc=1; for(int i=0;i<S.count;i+) if(S.mat.mci>0&&visitedi=0) DFS(i); if(S.count>np) cout<<S.mat.Pnamec<<"->" pc+; if(
15、np=S.count)returnMainFace();void guide_line()/導(dǎo)游線路 checked(); cout<<"n*請(qǐng)輸入起始景點(diǎn)的景點(diǎn)編號(hào):" int c; cin>>c; c-; for(int i=0;i<S.count;i+) visitedi=0; pi=0;/入度置初值為0 np=0; cout<<"*形成的導(dǎo)游線路圖(采用深度優(yōu)先策略)如下所示:nnt" DFS(c);/*/void check_circuit()/判斷回路 checked(); if(np=0) cout
16、<<"n*缺少合法的導(dǎo)游線路圖!n*請(qǐng)先生成一個(gè)合法的導(dǎo)游線路圖!n" returnMainFace(); bool f=true; for(int i=0;i<S.count;i+) if(pi>1) if(f) cout<<"n*該導(dǎo)游線路圖存在回路n線路中的重復(fù)走過(guò)的景點(diǎn)顯示如下:nt" f=false; cout<<"編號(hào):"<<i+1<<" ,"<<"景點(diǎn)名稱:"<<S.mat.Pnamei
17、<<endl; if(f) cout<<"nt*未找到存在于該導(dǎo)游線路圖中的回路。n" returnMainFace();void Floyd(int AMM,int pathMM) int i,j,k; for(i=0;i<S.count;i+) for(j=0;j<S.count;j+) if(S.mat.mij=0&&i!=j) Aij=INF; else if(i=j) Aij=0; else Aij=S.mat.mij; if(i!=j&&S.mat.mij<INF) pathij=i; e
18、lse pathij=-1; /* for(i=0;i<S.count;i+) for(j=0;j<S.count;j+) cout<<pathij<<' ' cout<<endl; */ for(k=0;k<S.count;k+) for(i=0;i<S.count;i+) for(j=0;j<S.count;j+) if(Aij>Aik+Akj) Aij=Aik+Akj; pathij=pathkj; /* for(i=0;i<S.count;i+) for(j=0;j<S.count;j+
19、) cout<<pathij<<' ' cout<<endl; */*/void min_distance()/最短路徑、距離 checked(); /int AMM,pathMM; int pathMM; int AMM; Floyd(A,path); /Dispath while(true) system("cls"); Num_Name(); int i,j,k,s; int apathM,d; cout<<"*請(qǐng)輸入要查詢的最短路徑和最短距離的兩個(gè)景點(diǎn)的編號(hào):n" cout<&
20、lt;"t-景點(diǎn) 1:" cin>>i; i-; cout<<"t-景點(diǎn) 2:" cin>>j; j-; if(Aij<INF&&i!=j) cout<<"n*從 "<<S.mat.Pnamei<<" 到 "<<S.mat.Pnamej<<" 的最短路徑為:" k=pathij; d=0;apathd=j; while(k!=-1&&k!=i) d+;apathd
21、=k; k=pathik; d+;apathd=i; cout<<S.mat.Pnameapathd; /cout<<apathd; for(s=d-1;s>=0;s-) cout<<" -> "<<S.mat.Pnameapaths; /cout<<','<<apaths; cout<<" ,最短距離為:"<<Aij<<endl; else if(i=j) cout<<"n*景點(diǎn)編號(hào)輸入不合法!n
22、" else cout<<"n*這兩個(gè)景點(diǎn)間不存在路徑n" cout<<"n是否繼續(xù)執(zhí)行最短路徑和最短距離的查詢(Y/N)" Y_N(); returnMainFace();void build_road()/道路修建規(guī)劃圖、最小生成樹(shù)(prime算法) /Prim checked(); cout<<"n*道路修建規(guī)劃圖(prime算法)規(guī)劃如下:n" int lowcostM,min,closestM,i,j,k,v=0,sum=0,num=0; int AMM; for(i=0;i&l
23、t;S.count;i+) for(j=0;j<S.count;j+) if(S.mat.mij=0&&i!=j) Aij=INF; else if(i=j) Aij=0; else Aij=S.mat.mij; for(i=0;i<S.count;i+) lowcosti=Avi; closesti=v; for(i=1;i<S.count;i+) min=INF; for(j=0;j<S.count;j+) if(lowcostj!=0&&lowcostj<min) min=lowcostj; k=j; if(min<IN
24、F) cout<<"t-第 "<<+num<<" 條路:從 "<<S.mat.Pnameclosestk<<" 到 "<<S.mat.Pnamek<<" ,該條道路長(zhǎng)度為:"<<min<<endl; sum+=min; lowcostk=0; for(j=0;j<S.count;j+) if(Akj!=0&&Akj<lowcostj) lowcostj=Akj; closestj=
25、k; cout<<"*修建道路的總長(zhǎng)度為:"<<sum<<endl; returnMainFace();void MainFace()/主界面 system("cls"); cout<<"n主菜單:n" cout<<"t1、創(chuàng)建景區(qū)景點(diǎn)分布圖;n" cout<<"t2、輸出景區(qū)景點(diǎn)分布圖(鄰接矩陣);n" cout<<"t3、輸出導(dǎo)游線路圖;n" cout<<"t4、判斷
26、導(dǎo)游線路圖有無(wú)回路;n" cout<<"t5、求兩個(gè)景點(diǎn)間的最短路徑和最短距離;n" cout<<"t6、輸出道路修建規(guī)劃圖;n" cout<<"t0、退出。n" cout<<"n*請(qǐng)輸入操作選擇:" char c; c=getch(); cout<<c<<endl; while(!(c>='0'&&c<='6') cout<<"*輸入有誤,請(qǐng)重新輸入:" c=getch(); cout<<c<<endl; switch(c) case '1': create_graph();break; case '2': print_graph();break; case '3': guide_line();break;/導(dǎo)游線路 case '4': check_circuit();break;/判斷回路 case '5': min_d
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 三農(nóng)產(chǎn)品品質(zhì)管理方案
- 數(shù)據(jù)挖掘技術(shù)在業(yè)務(wù)智能化中的應(yīng)用作業(yè)指導(dǎo)書(shū)
- 2025年青海貨運(yùn)從業(yè)資格證考試模擬試題及答案大全解析
- 2025年河北貨運(yùn)從業(yè)資格證考試題技巧
- 2025年保山a2貨運(yùn)從業(yè)資格證模擬考試
- 2025年遼寧貨運(yùn)從業(yè)資格證考試資料
- 2025年伊春c1貨運(yùn)上崗證模擬考試
- 2024年高中語(yǔ)文第四單元第13課宇宙的邊疆課時(shí)優(yōu)案1含解析新人教版必修3
- 粵教版道德與法治九年級(jí)上冊(cè)2.1.2《政府社會(huì)治理的主要職責(zé)》聽(tīng)課評(píng)課記錄
- 初中班主任教師工作計(jì)劃
- 最新如何進(jìn)行隔代教育專業(yè)知識(shí)講座課件
- 當(dāng)前警察職務(wù)犯罪的特征、原因及防范,司法制度論文
- 奧特萊斯專題報(bào)告(經(jīng)典)-課件
- 《新制度經(jīng)濟(jì)學(xué)》配套教學(xué)課件
- 計(jì)算機(jī)文化基礎(chǔ)單元設(shè)計(jì)-windows
- 廣東省保安服務(wù)監(jiān)管信息系統(tǒng)用戶手冊(cè)(操作手冊(cè))
- DNA 親子鑒定手冊(cè) 模板
- 深刻認(rèn)識(shí)民航安全工作的五個(gè)屬性
- DB33T 1233-2021 基坑工程地下連續(xù)墻技術(shù)規(guī)程
- 天津 建設(shè)工程委托監(jiān)理合同(示范文本)
- 運(yùn)動(dòng)技能學(xué)習(xí)與控制課件第六章注意與運(yùn)動(dòng)技能的控制
評(píng)論
0/150
提交評(píng)論