2017-09-17 21:10:45
writer:pprp
看了看dijkstra演算法,用自己語言總結一下主要過程吧,
首先,明確這個演算法用處是在於計算單源最短路徑問題並且邊權非負,給出乙個起點可以找到其他點的最短路徑
複雜度為o(n^2)
思想:貪心的做法,每次只看現在的最短路的部分,但是要記得更新已確定該點到其他點的距離
總結一下,dijkstra的做法:
需要 dis vis map 三個陣列
給出起點就可以找到到其他所有點的最短路
1、初始化dis陣列和起點的dis和vis
2、進行n個點的n次迴圈
3、從起點開始,找到距離最短的點
4、然後將其dis和vis更改,
5、更改該點相連的其他點的距離
模板如下:
constint maxn = 1010
;const
int inf = 0x3f3f3f3f
;int
mp[maxn][maxn];
bool
vis[maxn];
intdis[maxn];
void dijkstra(int
st) vis[st] = 1
; dis[st] = 0
;
int rec = -1
;
for(int i = 1 ; i < n ; i++)//
起到了迴圈的作用
}if(rec == -1)return
; vis[rec] = 1
;
for(int j = 1; j <= n; j++)//
更新該點連線到的其他的點
}}
使用方法:
for(int i = 0 ; i < maxn; i++)for(int j = 0 ; j < maxn; j++)
mp[i][j] =inf;
memset(vis,
0,sizeof
(vis));
for(int i = 0 ; i < t ; i++)
dijkstra(n);
for(int i = 1; i < n ; i++)
cout
<< dis[i] << "";
cout
<< endl;
dijkstra 演算法理解
求有向圖中乙個源點到其他頂點的最短距離 自己的理解 剛開始的時候相當於有三個集合 v 頂點集合 s 已求得的最短距離頂點集合,假設求a到其他頂點的最短距離 s 剩餘頂點集合 d 儲存的是最短距離值 求一維陣列中的最小值的下標,這個陣列不包含已經求得的頂點 找出最小值下標後,放入到s中,然後求剩餘頂點...
三分演算法 理解,模板
三分模板以前也用過,就是沒怎麼想過具體的。今天看了一些博文,寫一些自己的東西。一.適用於上凸或下凸曲線 比如開口向上或者向下的拋物線 可以確定曲線的最值。二.複雜度 o 2log3n 比二分慢一點。三.具體實現 1.最大值 l 左邊界 r 右邊界 mid l r 2 midmid r mid 2 i...
A 演算法理解
廣度優先 bfs 和深度優先 dfs 搜尋 深度優先搜尋,用俗話說就是不見棺材不回頭。演算法會朝乙個方向進發,直到遇到邊界或者障礙物,才回溯。一般在實現的時候,我們採用遞迴的方式來進行,也可以採用模擬壓棧的方式來實現。如下圖,s代表起點,e代表終點。我們如果按照右 下 左 上這樣的擴充套件順序的話,...