数据结构最短路径例题_数据结构算法实验8图的最短路径问题附源代码.doc
浙江大學城市學院實驗報告
課程名稱 數據結構與算法
實驗項目名稱 實驗八 圖的最短路徑問題
實驗成績 指導老師(簽名 ) 日期
實驗目的和要求
掌握圖的最短路徑概念。
理解并能實現求最短路徑的DijKstra算法(用鄰接矩陣表示圖)。
二. 實驗內容
1、編寫用鄰接矩陣表示有向帶權圖時圖的基本操作的實現函數,基本操作包括:
① 初始化鄰接矩陣表示的有向帶權圖 void InitMatrix(adjmatrix G);
② 建立鄰接矩陣表示的有向帶權圖 void CreateMatrix(adjmatrix G, int n) (即通過輸入圖的每條邊建立圖的鄰接矩陣);
③ 輸出鄰接矩陣表示的有向帶權圖void PrintMatrix(adjmatrix G, int n) (即輸出圖的每條邊)。
把鄰接矩陣的結構定義以及這些基本操作函數存放在頭文件Graph2.h中。
2、編寫求最短路徑的DijKstra算法函數 void Dijkstra( adjmatrix GA, int dist[], edgenode *path[], int i, int n) ,該算法求從頂點i到其余頂點的最短路徑與最短路徑長度,并分別存于數組 path 和 dist 中。編寫打印輸出從源點到每個頂點的最短路徑及長度的函數void PrintPath(int dist[], edgenode *path[], int n)。
3、編寫測試程序(即主函數),首先建立并輸出有向帶權圖,然后計算并輸出從某頂點v0到其余各頂點的最短路徑。
要求:把指針數組的基類型結構定義edgenode、求最短路徑的DijKstra算法函數、打印輸出最短路徑及長度的函數PrintPath以及主函數存放在文件test9_2.cpp中。
測試數據如下:
0
0
1
2
3
5
4
4
8
2
3
10
7
6
5
9
6
15
4、填寫實驗報告,實驗報告文件取名為report8.doc。
5、上傳實驗報告文件report8.doc與源程序文件test9_2.cpp及Graph2.h到Ftp服務器上自己的文件夾下。
三. 函數的功能說明及算法思路
包括每個函數的功能說明,及一些重要函數的算法實現思路
【結構說明】
const int MaxVertexNum=10; //圖的最大頂點數
const int MaxEdgeNum=100; //邊數的最大值
const int MaxValue=32767; //權值的無窮大表示
typedef int adjmatrix[MaxVertexNum][MaxVertexNum]; //鄰接矩陣
typedef struct Node {
int adjvex;
struct Node *next;
} edgenode;//路徑結點
【函數說明】
① void InitMatrix(adjmatrix &G)
功能:初始化鄰接矩陣表示的有向帶權圖
思路:將鄰接矩陣中的所有權值設置為無窮大(MaxValue)
② void CreateMatrix(adjmatrix &G, int n)
功能:建立鄰接矩陣表示的有向帶權圖(即通過輸入圖的每條邊建立圖的鄰接矩陣)
思路:按照輸入的頂點信息和權值信息,更新鄰接矩陣內對應的值
③ void PrintMatrix(adjmatrix G, int n)
功能:輸出鄰接矩陣表示的有向帶權圖 (即輸出圖的每條邊)
思路:按照一定的格式輸出鄰接矩陣
④ void Dijkstra( adjmatrix GA, int dist[], edgenode *path[], int i, int n)
功能:求最短路徑的DijKstra算法函數
思路:按照從源點到其余每一頂點的最短路徑長度遞增的次序依次求出從源點到每個頂點的最短路徑及長度。設立一個集合S,用以保存已求得最短路徑的終點,其初值為只有一個元素,即源點;一個數組 dist[n],其每個分量 dist[j] 保存從源點經過S集合中頂點最后到達頂點 j 的路徑中最短路徑的長度,其初值為從源點到每個終點的弧的權值(沒弧則置為∞);一個指針數組path[n],path[j]指向一個單鏈表,保存相應于dist[j]的從源點到頂點 j 的最短路徑(即頂點序列),初值為空。
⑤ void PATH(edgenode *path[], in
總結
以上是生活随笔為你收集整理的数据结构最短路径例题_数据结构算法实验8图的最短路径问题附源代码.doc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 跟华为悦盒V9U机顶盒拼了
- 下一篇: beta冲刺总结