這一題是用二維陣列將點存入。
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 環路權重為正,去掉改環路可以得到更短的路徑,因此不可能是最短路徑 最短...