單源最短路徑 prim演算法

2021-08-29 18:44:23 字數 744 閱讀 5405

這一題是用二維陣列將點存入。

scanf("%d%d%d",&x,&y,&z);

if(a[x][y]!=0)

else a[x][y]=z;

至於那個判斷則是判重邊啦。

先將每個點的權值賦最大(d陣列存點的值)。

const int inf=100000000;

......

for(i=1;i<=n;i++)d[i]=inf;

現在將d的s位,也就是出發編號至0。

d[s]=0;
接下來,定義乙個最小值,之後迴圈,假如有一點的值比最小值要小而且該點未處理(p陣列為判斷該點是否處理,處理為1,否則為0。)

for(i=1;i<=n;i++)

}

最後總判斷一遍。

若j點未判斷且邊值不為零(否則為孤島)且該點值比最小點值加邊值大,則更新資料。

for(j=1;j<=n;j++)

最後的輸出記得判可否到達。

if(d[i]==inf)

cout<<"2147483647 ";

else printf("%d ",d[i]);

因為這題是用圖的思想來做的,所以還是會有乙個賊大賊大的點超時,tle,qwq,但也是一種思路。

bye~~

單源最短路徑演算法

簡單介紹 最短路徑演算法是圖演算法中的經典演算法,是用於解決圖中某個頂點到另外乙個頂點所經過路徑的花銷最小 這裡的花銷可能是時間也可能指費用等 dijkstra是用於解決單源最短路徑的經典演算法。圖的儲存方式 鄰接矩陣 在鄰接矩陣中,要獲取某個結點的出度和入讀,是通過掃瞄結點所在臨界矩陣中的行列完成...

單源最短路徑

include define max 999 define maxverts 10 typedef struct graph void chushi graph g void dij graph int key,int int int main for i 1 i g.numverts i dij ...

單源最短路徑

最優子結構 最短路徑的子路徑也是最短路徑,動態規劃和貪心演算法的乙個重要指標。環路 一條最短路徑不可能包含環路 1 環路權重為負,如果有一條環路權重為負,則不存在最短路徑 2 環路權重為零,如果包含該環路,則將該環路去掉即可 3 環路權重為正,去掉改環路可以得到更短的路徑,因此不可能是最短路徑 最短...