模板如下:
現在我將在**注釋中解釋此演算法!讓我們先從主函式看起
#include
#include
using
namespace std;
#define maxn 2550
#define inf 0x3f3f3f
int n,m,s,d;
int dist[maxn]
;//i到j的最短距離
int graph[maxn]
[maxn]
;bool vis[maxn]=;
int pre[maxn]
;voiddj(
int start)
vis[start]
=true
;for
(int i =
2; i <= n; i++
)//除了源點,還有n-1個點,故找n-1次
} vis[minid]
=true
;//找到後,標記,這個點就相當於選好了
for(
int i =
1; i <= n; i++
)//以這個點去開拓新大陸,開始更新路徑,如果原路徑的長度大於開拓之後的路徑,那麼我們就更新路徑,並把更新掉的路徑的前驅結點更新為minid}}
}int
main()
}for
(int j =
1; j <= m; j++)dj
(s);
//咱們轉移到dijkstra函式
cout<
}
Dijkstra演算法 最短路徑問題
時間限制 1000 ms 記憶體限制 65536 kb 提交數 807 通過數 373 平面上有 n個點 n 100 每個點的座標均在 10000 10000 之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點間的直線距離。現在的任務是找出從一點到...
最短路徑問題 (dijkstra演算法)
給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。input 輸入n,m,點的編號是1 n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為d,花費為p。最後一行是兩個數 s,...
Dijkstra演算法 最短路徑問題
void dijkstra int n for int i 1 i n i collect 0 1 for int j 0 j collect temp 1 進入集合 更新點temp所有相鄰點距離該集合的距離 for int i 1 i n i else if dest temp map temp ...