實驗六最短路徑
一、實驗目的
1.學習掌握圖的儲存結構
2.學會編寫求最短路徑的演算法
二、實驗內容
1、實驗題目
編寫**實現dijkstra生成最短路徑的演算法,其中要有完整的圖的輸入輸出
2、簡單介紹
圖的儲存:用鄰接矩陣,這樣會方便不少。
鄰接矩陣是乙個二維陣列,陣列中的元素是邊的權(一些數值),陣列下標號為結點的標號。(1)例如二維陣列中的乙個元素m[5][6]的值為39,則表示結點5、6連線,且其上的權值為39。
(2)用鄰接矩陣儲存圖,對圖的讀寫就簡單了。因為鄰接矩陣就是乙個二維陣列,因此對圖的讀寫就是對二維陣列的操作。只要能弄清楚邊的編號,就能把圖讀入了。
用一對結點表示邊(也就是輸入的時候輸入一對結點的編號)
求最短路徑的演算法:
求最短路徑就是求圖中的每乙個點到圖中某乙個給定點(這裡認為是編號為0的點)的最短距離。
具體演算法就是初始有乙個舊圖,乙個新圖。開始的時候舊圖中有所有的結點,新圖中初始為只有乙個結點(源點,路徑的源頭)。整個演算法就是不停的從舊圖中往新圖中新增點,直到所有的點都新增到新圖中為止。
要實現這個演算法,除了用二維陣列儲存圖,還需要使用到兩個輔助的陣列
陣列find[n]:此陣列是用來表示標號對應的結點是否已經被新增到新圖中(因為只有舊圖中的點我們才需要新增到新圖中,並且只有舊圖中點到源點的距離,我們才需要進行更新)其中n為圖中結點的個數。
陣列distance[n]:此陣列記錄圖中的點到源點的距離。這個陣列裡面存放的值是不斷進行更新的。其中n為圖中結點的個數。
資料結構 最短路徑 Dijkstra
include stdio.h include stdlib.h include io.h include math.h include time.h define ok 1 define error 0 define true 1 define false 0 define maxedge 20 ...
資料結構實驗 最短路徑
實驗內容 對於使用者隨機輸入的乙個有向帶權圖,求從某個頂點到其他各頂點的最短路徑。include define maxv 20 define inf 32 若不存在,則設的權為32,表示無窮大 typedef struct vertextype 頂點型別 typedef struct matgrap...
資料結構 最短路徑問題
求解這個問題的時候我們用到dijkstra演算法,演算法的描述如下 1 首先定義乙個陣列用來儲存從源點到每乙個頂點的最短路徑 不可達用無窮表示 使用s集合來儲存已經求得最短路徑的頂點,那麼剩餘頂點就存放在集合t中 2 第一次迭代的時候s只有源點,然後根據s集合中的頂點來更新最短路徑陣列d中的值,每次...