最短路模板

2021-10-01 14:27:20 字數 909 閱讀 4279

最短路模板

思路:開乙個陣列dis[i](一開始把陣列全初始化為極大值,表示離源點的距離為無窮大),表示 i 點到源點的最短距離。一開始把與源點直接相鄰的點和源點的距離存入dis[i]陣列,再在dis陣列中找到乙個最小值,並標記。顯然該標記點離源點是最近的。而其他點經過該標記點到源點的距離可能比直接原點的距離或經其他路線到源點的距離更短。那麼就進行下一步操作,在dis陣列上把該標記周圍的點到源點的距離更新一下。之後又遍歷一下dis,在沒有被標記的點中找到離源點最近的點並標記。然後就重複進行遍歷、標記、更新操作。

#include

#include

const

int n=

105, inf=

9999999

;int dis[n]

, w[n]

[n],vis[n]

;//w為地圖面積

//vis陣列用來放置已經是最小路徑的點

int n,m;

//n為路口數和賽場所在地,m為有多少條路

void

dijkstra

(int src)

vis[u]=1

;//將該點放入確定是最小路徑的陣列

for(

int j=

1; j<=n;

++j)if(

!vis[j])}

}int

main()

for(

int i =

0;i++i)

dijkstra(1

);printf

("%d\n"

, dis[n]);

//輸出從1到n的最短花費

}return0;

}

最短路模板

1.dijkstra演算法 演算法思想 從某乙個點開始,找與它距離最近的乙個點,然後更新所有點到這條路徑的距離,然後再次選取乙個距離上乙個點路徑最短的點,將其加入路徑,以此進行,直到求出起點到所有點的最短距離.注意 權值不能為負,如圖 1到3的距離應該是零,但這裡結果為一 1 鄰接矩陣 複雜度 o ...

最短路模板

週六週日tyvj上有模擬賽 順便逃了周練 霧 複習了一下圖論裡的基本演算法 彷彿第一次寫最短路的手生 寫的太少了 orz dijkstra include define maxn 10001 define maxm 300001 using namespace std template void r...

最短路模板

include include include include include include define inf 0x3f3f3f3f using namespace std const int maxn 105 int dis maxn pre maxn struct edge 邊 edge ...