2023年數(shù)據(jù)結(jié)構(gòu)實驗報告圖與景區(qū)_第1頁
2023年數(shù)據(jù)結(jié)構(gòu)實驗報告圖與景區(qū)_第2頁
2023年數(shù)據(jù)結(jié)構(gòu)實驗報告圖與景區(qū)_第3頁
2023年數(shù)據(jù)結(jié)構(gòu)實驗報告圖與景區(qū)_第4頁
2023年數(shù)據(jù)結(jié)構(gòu)實驗報告圖與景區(qū)_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

學(xué)生學(xué)號實驗課成績

忒隆理7大考

學(xué)生實驗報告書

實驗課程名稱數(shù)據(jù)結(jié)構(gòu)與算法綜合實驗

開課學(xué)院計算機科學(xué)與技術(shù)學(xué)院

指導(dǎo)教師姓名

學(xué)生姓名

學(xué)生專業(yè)班級

2022

2023

3學(xué)年第學(xué)期

實驗課程名稱:數(shù)據(jù)結(jié)構(gòu)與算法綜合實驗

實驗項目名稱圖與景區(qū)信息管理系統(tǒng)實踐報告成績

實驗者專業(yè)班級組別

同組者完畢日期2023年5月23日

第一部分:實驗分析與設(shè)計(可加頁)

一、實驗?zāi)康暮鸵?guī)定

1.目的

?掌握圖的定義和圖的存儲結(jié)構(gòu)。

?掌握圖的創(chuàng)建方法和圖的應(yīng)用

?使用C++語言,定義圖的數(shù)據(jù)結(jié)構(gòu),結(jié)合迭代開發(fā)思緒實現(xiàn)“景區(qū)信息管理系統(tǒng)”。

=掌握圖的兩種遍歷方法和應(yīng)用。

=使用C++語言和深度優(yōu)先算法實現(xiàn)“旅游景點導(dǎo)航”功能開發(fā)。

?掌握迪杰斯特拉算法和應(yīng)用。

?使用C++語言和迪杰斯特拉算法實現(xiàn)“搜索最短途徑”功能開發(fā)。

?理解最小生成樹的概念,掌握普里姆算法和應(yīng)用。

=使用C++語言和最小生成樹算法實現(xiàn)“鋪設(shè)電路規(guī)劃”功能開發(fā)。

2.規(guī)定

=開發(fā)景區(qū)信息管理系統(tǒng),對景區(qū)的信息進行管理。

?使用圖的數(shù)據(jù)結(jié)構(gòu)來保存景區(qū)景點信息,為用戶提供創(chuàng)建圖、查詢景點信息、旅

游景點導(dǎo)航、搜索最短途徑、鋪設(shè)電路規(guī)劃等功能。

二、分析與設(shè)計

(1)創(chuàng)建工程讀取文獻信息,創(chuàng)建圖,輸出周邊景點信息讀取景區(qū)信息文獻,采用

圖的存儲結(jié)構(gòu),創(chuàng)建景區(qū)景點圖,查詢景點信息。

(2)迭代開發(fā),進行深度優(yōu)先搜索,實現(xiàn)旅游景點導(dǎo)航。

⑶繼續(xù)迭代,采用迪杰斯特拉算法、普里姆算法,實現(xiàn)搜索最短途徑和電路鋪

設(shè),開發(fā)景區(qū)信息管理系統(tǒng)。

1.數(shù)據(jù)結(jié)構(gòu)的設(shè)計

?記錄頂點信息的結(jié)構(gòu)體

structVex

{

。intnum;〃景點編號

。charname[20];〃景點名字

。chardesc[1024];//景點介紹

};

=記錄邊的信息的結(jié)構(gòu)體

structEdge

(

intvexl;〃邊的第一個頂點

。intvex2;〃邊的第二個頂點

intweight;//權(quán)值

};

=用來保存途徑的鏈表的結(jié)構(gòu)體

typedefstructPath

{

intvexs[20];〃保存一條途徑

。Path*next;

}*PathList;

?CGraph類用來實現(xiàn)相應(yīng)功能的方法

classCGraph

(

private:

。intm_aAdjMatrix[20][20];//鄰接矩陣

。Vexm_aVexs[20];〃頂點信息數(shù)組

。intmnVexNum;〃當(dāng)前圖的頂點個數(shù)

public:

voidTnit(void);

。boolInsertVex(VexsVex);

boolInsertEdge(EdgesEdge);

VexGetVex(intnVex);

。intGetVexnum(void);

。intFindEdge(intnVex,EdgeaEdge[]);

voidDFS(intnVex,boo1aVisited[],int&nIndex,PathList&pList);

。voidDFSTraverse(intnVex,PathList&pList);

intFindShortPath(intnVexStart,intnVexEnd,EdgeaPath[]);

voidFindMinTree(EdgeaPath口);

);

2.核心算法設(shè)計

(1)輸出周邊景點信息

Input:操作表號與景點編號

Output:輸入景點的周邊景點信息

Process:

intCGraph::FindEdge(int.nVex,EdgeaEdge[])

(

0

。intk=0;

for(inti=0;i<m_nVexNum;i++)

(

if(m_aAdjMatrix[nVex][i]!=0)

0{

。aEdge[k].vexl=nVex;

t>。aEdge[k].vex2=i;

。aEdge[k].weight=m_aAdjMatrix[nVex][i];

。k++;

°}

)

。returnk;〃返回邊的條數(shù)

)

(2)深度優(yōu)先搜索算法實現(xiàn)旅游景點導(dǎo)航

Input:操作表號與景點編號

Output:從輸入景點出發(fā)走遍整個景區(qū)的各種路線方案

Process:

voidCGraph::DFS(intnVex,boo1aVisited口,int&nTndex,PathList&pList)

(

oaVisited[nVex]=true;〃改為已訪問

。pList->vexs[nlndex++]=nVex;//訪問頂點

?!ㄅ袛嗍欠袼泄?jié)點都已訪問過

intnVexNum=0;

ofor(inti=0;i<mnVexNum;i++)

(

oif(aVisited[i])nVexNum++;

6)

。?!ㄋ许旤c都被訪問過

。if(nVexNum==m_nVexNum)

(

〃新增鏈表節(jié)點,保存本次遍歷的途徑

。pList->next=(PathList)malloc(sizeof(Path));

ofor(inti=0;i<m_nVexNum;i++)

00{

pList->next->vexs[i]=pList->vexs[i];

。}

。pList=pList—>next;

。opList->next=NULL;

。)

e1se

6{

。//按頂點的存儲順序,查找當(dāng)前頂點相連的的頂點

for(inti=0;i<mnVexNum;i++)

(

。〃既沒有遍歷過,又與當(dāng)前頂點相連的頂點

。。。if(!aVisited[i]&&(m_aAdjMatrix[nVex][i]>0))

。(

。。?!ㄒ栽擁旤c為起點遍歷剩下的頂點

。DFS(i,aVisited,nlndex,pList);

。。。。aVisited[i]:false;〃訪問狀態(tài)置空

。o。nIndex—;〃回溯

00)

voidCGraph::DFSTraverse(intnVex,PathList&pList)

{

。intn!ndex=0;

boo1aVisited[MAX_VERTEX_NUM]={false);

DFS(nVex,aVisited,nlndex,pList);

}

(3)Dijkstra算法搜索最短途徑

Input:操作表號與起始景點編號

Output:從起始頂點到終點的最短途徑

Process:

intCGraph::FindShortPath(intnVexStart,intnVexEnd,EdgeaPath[])

{

intnShortPath[MAX_VERTEX_NUM][MAX.VERTEX_NUM];//保存最短途徑

intnShortDistance[MAX?VERTEXNUM];//保存最短距離

boo1aVisited[MAX_VERTEX_NUM];//判斷某頂點是否已經(jīng)加入到最短途徑

。//初始化

。intv;

。for(v=0;v<mnVexNum;v++)

。(

。。aVisited[v]=false;

。if(m_aAdjMatrix[nVexStart][v]!=0)

//初始化該頂點到其他頂點的最短距離,默認為兩點間的距離

。nShortDistance[v]=m_aAdjMatrix[nVexStart][v];

。e1se

?!偃珥旤ci和nVexStart不相連,則最短距離設(shè)為最大值

nShortDistanee[v]=0x7FFFFFFF;

。nShortPath[v][0]=nVexStart;//起始點為nVexStart

for(int1;j<m_nVexNum;j++)

nShortPath[v][j]=-1;〃初始化最短途徑

)

//初始化,nVexStart頂點加入到集合中

aVisited[nVexStart]=true;

。intmin;

for(inti=l;i<m_nVexNum;i++)

0{

。。min=0x7FFFFFFF;

。boo1bAdd二false;〃判斷是否尚有頂點可以加入到集合中

ofor(intj=0;j<mnVexNum;j++)

。(

t>ooif(aVisited[j]—false)

00(

。oif(nShortDistance[j]<min)

°{

。。。。v二j;〃j頂點離nVexSlarl頂點最近

。。。min=nShortDistance[j];〃)到門丫exStart的最短距離為min

。。bAdd=true;

000)

6001

。}//假如沒有頂點可以加入到集合,則跳出循環(huán)

oif(bAdd==fa1se)

00{

?break;

)

。aVisited[v>true;//將頂點j加入到集合

nShortPath[v][i]=v;//將頂點j保存到nVexStart到j(luò)的最短途徑里

t>for(intw=0;w<mnVexNum;w++)

(

//將w作為過度頂點計算rWexStart通過w到每個頂點的距離

。if(aVisited[w]==false&&(min+m_aAdjMatrix[v][w]<nShortDistance_a

AdjMatrix[v][w]!=0)

000(

?!ǜ庐?dāng)前最短途徑及距離

。。。nShortDistance[w]=min+m_aAdjMatrix[v][w];

。。for(inti=0;i<m_nVexNum;i++)

0oo(

。。。?!偃缤ㄟ^W到達頂點i的距離比較短,則將W的最短途徑復(fù)制給i

。onShortPath[w][i]=nShortPath[v][i];

0Of

00)

。)

)

intnlndex=0;

。intnVexl=nVexStart;

//將最短途徑保存為邊的結(jié)構(gòu)體數(shù)組

for(inti=l;i<m_nVexNum;i++)

oif(nShortPath[nVexEnd][i]!=-l)

。(

aPath[nIndex].vex1=nVex1;

aPath[nIndex].vex2=nShortPath[nVexEnd][i];

oaPath[nlndex].weight=m_aAdjMatrix[aPath[nlndex].vexl][aPath[nlnd

ex].vex2];

。。nVexl=nShortPath[nVexEnd][i];

。nlndex++;

。)

。)

t>returnnIndex;

)

(4)普里姆算法構(gòu)建最小生成樹

Input:輸入操作編號

Output:得到最小生成樹的途徑

Process:

voidCGraph::FindMinTree(EdgeaPath[])

(

boolaVisited[MAX_VERTEX_NUM];〃判斷某頂點是否在最小生成樹頂點集合里

。for(inti=0;i<MAX_VERTEX_NUM;i++)

{

。aVisited[i]=false;

b}

。aVisited[0]=true;〃。頂點加入到集合中

。intmin;

。intnVexl,nVex2;

。for(intk=0;k<mnVexNum-1;k++)

(

。min=0x7FFFFFFF;

。for(inti=0;i<m_nVexNum;i++)

00{

if(aVisited[i])〃從集合中取一個頂點

。(

。for(intj=0;j<m_nVexNum;j+4-)

d0{

。。if(!aVisited[j])〃從不在集合的頂點中取出一個頂點

00{

。3if((m_aAdjMatrix[i][j]<min)&&(m_aAdjMatrix[i][j]!=0))

0a(

o。。nVexl=i;

。ooonVex2=j;

。o。。。min=m_aAdjMatrix[i][j];〃找出最短的邊

6bO}

6)

00}

0}o

//保存最短邊的兩個頂點

aPath[k].vexl=nVexl;

aPath[k].vex2=nVex2;

aPath[k].weight=m_aAdjMatrix[nVexl][nVex2];

〃將兩個頂點加入到集合

。aVisited[nVexl]=true;

aVisited[nVex2]=true;

3.測試用例設(shè)計

?使用實驗所規(guī)定的圖創(chuàng)建兩個文本文獻,對文獻進行讀取,觀測其相關(guān)功能的實

現(xiàn)。

三、重要儀器設(shè)備及耗材

1.安裝了Windows10或其它版本的Windows操作系統(tǒng)的PC機1臺

2.PC機系統(tǒng)上安裝了MicrosoftVisualStudio2023開發(fā)環(huán)境

第二部分:實驗過程和結(jié)果(可加頁)

一、實現(xiàn)說明

使用MircosoftVisua1Studio2023開發(fā)工具,創(chuàng)建一個空的控制

臺工程。運用圖的存儲結(jié)構(gòu)來保存景區(qū)景點圖,使用C++語言開發(fā)景區(qū)信息管理系

統(tǒng),工程名為GraphCPro。

(1)添加Graph,h文獻,用來定義圖的數(shù)據(jù)結(jié)構(gòu),實現(xiàn)圖的相關(guān)操作。

(2)添加Tourism.h文獻,用來實現(xiàn)景區(qū)信息管理系統(tǒng)的相關(guān)功能。Touri

sm.h存放與Tourism.cpp相關(guān)函數(shù)的數(shù)據(jù)類型的定義,函數(shù)原型的聲明等。

(3)添加Main.cpp文獻,在文獻中創(chuàng)建程序入口函數(shù)intmain(void)o

調(diào)用Tourism.h中的相關(guān)函數(shù)實現(xiàn)相應(yīng)功能。

二、調(diào)試說明(調(diào)試手段、過程及結(jié)果分析)

調(diào)試的重要內(nèi)容為編寫程序的語法對的性與否,程序邏輯的對的性與否。

調(diào)試手段重要采用了MircosoftVisualStudio2023集成開發(fā)環(huán)境中

的“開始執(zhí)行(Ctrl+F5)”運營并測試,和Fl1“逐語句調(diào)試”、F12“逐過程

調(diào)試”、F9“切換斷點”、ctrl+B“新建斷點”等。

三、軟件測試(測試效果.界面、綜合分析和結(jié)論)

1.測試效果界面

-A

區(qū)O-

-BI區(qū)

-CI區(qū)

區(qū)

-D田I

區(qū)

區(qū)

Nh

-G_I-

>V27^^

V0->56oo

Voo

V0->V41o

>61oo

V0-Vooo

V1->V21ooO

V1->V34oo

V2->V43oo

V3->V64oo

V3->V56oo

V4->V65oo

V5-

語輸入選項(0~5):2

否而景點信息

)—A區(qū)

1—B區(qū)

2—C區(qū)

3—D區(qū)

工一E區(qū)

5—F區(qū)

5―G區(qū)

清輸入想要杏詢的景點編號:3

)區(qū)

風(fēng)景優(yōu)美,景色宜人

---------周邊景區(qū)--------

)區(qū)->(:區(qū)400m

)l1->Elg300m

)區(qū)一二區(qū)400m

===============旅游景點導(dǎo)航==============

0-A區(qū)

1-B區(qū)

2-C區(qū)

3-D區(qū)

4-E區(qū)

5-F

溫馨提示

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

評論

0/150

提交評論