資料結構**
建立乙個具有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...資料結構與演算法專題實驗報告
演算法與資料結構實驗報告
資料結構與演算法實驗報告