資料結構與演算法專題實驗報告

2022-03-14 10:59:38 字數 2184 閱讀 7396

資料結構**

建立乙個具有n(n≥1)個頂點的無向圖的鄰接矩陣,並對其按照「深度優先搜尋」和「廣度優先搜尋」方法進行遍歷。

1.編寫c程式予以實現。

2.程式要求能輸入圖的頂點數、邊數以及邊的關係,並自動生成鄰接矩陣。

3.結果輸出鄰接矩陣和遍歷的路徑。

4.熟悉無向圖的兩種遍歷演算法。

考慮用乙個n維陣列來存放無向圖,若兩個結點之間有邊,則n維陣列對應下標的那個元素值為1,否則為0;

在輸入圖的頂點數和邊數時我充分考慮了邊界條件,頂點數在[0,maxv]範圍內,邊數在[0,範圍內,在這個範圍內,程式繼續向下執行,否則返回重新輸入;

輸出鄰接矩陣的實質是輸出 n維陣列,我用兩重迴圈來實現;

深度優先遍歷我採用迪傑特斯拉演算法,不過要在此演算法中間加乙個判斷,所有的結點是否都已經遍歷過,如果是就退出,如果不是,則按順序從序號小的開始向大的尋找,找到乙個沒有遍歷過的結點繼續呼叫深度優先遍歷演算法;

廣度優先遍歷我採用了非遞迴演算法,其實質和深度優先遍歷演算法相同;

在主函式中直接呼叫creatgraph(g), dispmatrix(g) ,depthdisp(g,v) ,widthdisp(g)函式即可。

step1:設定無向圖最多的頂點數// 這個設定為了更好的輸出鄰接矩陣;

step2: 定義無向圖的資料結構;

step3:實現生成無向圖函式creatgraph(g)

a. 輸入頂點數n,判斷它是否在允許的範圍內,不在則返回重新輸入;

b. 輸入無向圖的邊數判斷它是否在允許的範圍內,不在則返回重新輸入 ;

c. 輸入邊,for語句(k=1 to 輸入兩頂點v,w,判斷v!=w & 0step4:

實現輸出鄰接矩陣函式 dispmatrix(graph &g) , 雙重for迴圈實現輸出無向圖的鄰接矩陣;

step5:實現深度優先遍歷的遞迴演算法函式depthdisp(graph &g,int v)

a. 從v開始遍歷,設定計數器num=0 ,並置頂點v已訪問;

b. for語句(i=1 to 判斷 如果是遞迴呼叫深度優先遍歷的遞迴演算法函式depthdisp(g, i),如果不是則退出;

c. 用for和if 語句判斷是否所有的頂點都已經遍歷完,

if num<

for (i=1 to )

if (visited[i]==1) i++

如果不是,則繼續呼叫深度優先遍歷的遞迴演算法函式 depthdisp(g,i);

step6:實現廣度優先遍歷的非遞迴演算法函式 widthdisp(graph &g)

a. 輸入廣度優先遍歷的出發點m ,判斷0b. for ( i=1 to

step7: 主函式直接呼叫creatgraph(g), dispmatrix(g) ,depthdisp(g,v) ,widthdisp(g)函式即可;

1. 建立無向圖函式的流程圖如下:

2.深度優先遍歷函式實現的流程圖如下:

3. 實現廣度優先遍歷的流程圖如下:

//二,不帶權值的無向圖的遍歷:

#include<>

#define maxv 20定義頂點的最大個數

struct graph定義無向圖的資料結構

;static int visited[maxv];

void creatgraph(graph &g實現建立無向圖的函式

cout<<"請輸入邊數:";

cin>>

while(> //v個頂點最多v(v-1)/2個頂點

for(i=0;i<=

for(j=0;j<=

for(k=1;k<=

}void dispmatrix(graph &g輸出鄰接矩陣

}void depthdisp(graph &g,int v深度優先遍歷的遞迴演算法

}void widthdisp(graph &g廣度優先遍歷的非遞迴演算法

cout<<"廣度優先遍歷的序列為:";

cout< a[k]=m;

while(flag)

if(l>k)

cout

a[k]=i;

n++; }

}if(n!=判斷是否所有的頂點都已經遍歷過,如果沒有則繼續尋找沒有遍歷的頂點繼續遍歷

m=a[++j];

else

flag=0;

}cout<}

void main( )

資料結構與演算法專題實驗報告

目錄附錄a 報告格式 1 第一部分題目 3 第1題約瑟夫環 3 1 題目 3 2 目標 3 3 設計思想 3 4 演算法描述 4 5 程式流程圖 5 6 源程式 5 第2題大數階乘 9 1 題目 9 2 目標 9 3 設計思想 9 4 演算法描述 10 5 程式流程圖 11 6 源程式 11 第3題...

演算法與資料結構實驗報告

學生實驗報告冊 課程名稱 演算法與資料結構 實驗專案名稱 順序表實驗學時 2 同組學生姓名實驗地點 工科樓a205 實驗日期 2013年10月16日實驗成績 批改教師批改時間 實驗1 順序表 一 實驗目的和要求 掌握順序表的定位 插入 刪除等操作。二 實驗儀器和裝置 turbo c 2.0 三 實驗...

資料結構與演算法實驗報告

實驗名稱 線性表的應用指導教師 余文春 實驗日期 2014年月日實驗地點 北503 成績 實驗目的 1 掌握線性表及其順序儲存與鏈式儲存結構的概念。2 掌握兩種儲存方式的基本運算 實現方法和技術。3 靈活應用線性表進行程式設計,解決實際問題。實驗內容 約瑟夫 joseph 問題的一種描述是 編號為1...