第十二周專案3 廣度遍歷

2021-07-08 16:24:49 字數 2722 閱讀 6754

/*

* 檔名稱:專案3.cbp

* 作 者:孫欽達

* 完成日期:2023年12月1日

* 版 本 號:v1.0

* 問題描述:實現圖遍歷演算法,分別輸出如下圖結構的深度優先(dfs)遍歷序列和廣度優先遍歷(bfs)序列。

* 輸入描述:無

* 程式輸出:測試資料

*/

#ifndef graph_h_included

#define graph_h_included

#define maxv 100 //最大頂點個數

#define inf 32767 //inf表示∞

typedef int infotype;

//以下定義鄰接矩陣型別

typedef struct

vertextype; //頂點型別

typedef struct //圖的定義

mgraph; //圖的鄰接矩陣型別

//以下定義鄰接表型別

typedef struct anode //弧的結點結構型別

arcnode;

typedef int vertex;

typedef struct vnode //鄰接表頭結點的型別

vnode;

typedef vnode adjlist[maxv]; //adjlist是鄰接表型別

typedef struct

algraph; //圖的鄰接表型別

//功能:由乙個反映圖中頂點鄰接關係的二維陣列,構造出用鄰接矩陣儲存的圖

//引數:arr - 陣列名,由於形式引數為二維陣列時必須給出每行的元素個數,在此將引數arr宣告為一維陣列名(指向int的指標)

// n - 矩陣的階數

// g - 要構造出來的鄰接矩陣資料結構

void arraytomat(int *arr, int n, mgraph &g); //用普通陣列構造圖的鄰接矩陣

void arraytolist(int *arr, int n, algraph *&); //用普通陣列構造圖的鄰接表

void mattolist(mgraph g,algraph *&g);//將鄰接矩陣g轉換成鄰接表g

void listtomat(algraph *g,mgraph &g);//將鄰接表g轉換成鄰接矩陣g

void dispmat(mgraph g);//輸出鄰接矩陣g

void dispadj(algraph *g);//輸出鄰接表g

//int visited[maxv];

#endif // graph_h_included

#include #include #include "head.h"

void bfs(algraph *g, int v)

p=p->nextarc; //找下乙個鄰接頂點}}

printf("\n");

}int main()

, ,,,

};arraytolist(a[0], 5, g);

printf(" 由2開始廣度遍歷:");

bfs(g, 2);

printf(" 由0開始廣度遍歷:");

bfs(g, 0);

return 0;

}

#include #include #include "head.h"

//功能:由乙個反映圖中頂點鄰接關係的二維陣列,構造出用鄰接矩陣儲存的圖

//引數:arr - 陣列名,由於形式引數為二維陣列時必須給出每行的元素個數,在此將引數arr宣告為一維陣列名(指向int的指標)

// n - 矩陣的階數

// g - 要構造出來的鄰接矩陣資料結構

void arraytomat(int *arr, int n, mgraph &g)

g->e=count;

}void mattolist(mgraph g, algraph *&g)

//將鄰接矩陣g轉換成鄰接表g

g->n=g.n;

g->e=g.e;

}void listtomat(algraph *g,mgraph &g)

//將鄰接表g轉換成鄰接矩陣g

}}void dispmat(mgraph g)

//輸出鄰接矩陣g

printf("\n");}}

執行結果:

知識點總結:

1.初始化乙個佇列,並把根結點入列隊;

2.當隊列為非空時,迴圈執行步驟3到步驟5,否則執行6;

3.出佇列取得乙個結點,訪問該結點;

4.若該結點的左子樹為非空,則將該結點的左子樹入佇列;

5.若該結點的右子樹為非空,則將該結點的右子樹入佇列;

第十二周專案3 廣度遍歷

檔名稱 專案3.cbp 作 者 朱希康 完成日期 2015年11月30日 版 本 號 v1.0 問題描述 實現圖遍歷演算法,分別輸出如下圖結構的深度優先 dfs 遍歷序列和廣度優先遍歷 bfs 序列。輸入描述 無 程式輸出 測試資料 ifndef graph h included define gr...

第十二周專案 3(2)廣度優先遍歷

graph.h include define maxv 100 定義最大頂點數100 define limitless 9999 處理 無窮大 typedef int infotype 定義頂點與邊的相關資訊 typedef int vertex typedef struct 定義頂點型別 vert...

第十二周專案(3)

煙台大學計算機學院 檔名稱 xiangmu.cpp 完成日期 2017年11月19日 問題描述 dijkstra演算法的驗證 輸入描述 無 輸出描述 某一頂點到其他各點最短路徑 用到了graph.h include include include graph.h define maxsize 100...