單源最短路 Dijkstra演算法

2021-08-15 05:54:03 字數 780 閱讀 6224

前提:沒有負邊 (如果有負邊, 可以用此方法檢查是否有負圈)

const[max_v][max_v]  表示邊的權重值

d[max_v]     儲存從起點到每個點的總權重值

bool used[max_v]   表示當前點是否已經訪問完畢

思想:找到乙個已經確定最短距離的點, 更新跟它相鄰的點, 之後這個點就不用關心了。

起點最短距離是零, 最短距離已經確定, 那可以更新與他相鄰的點的距離, 其中最短的乙個距離的點的距離一定是確定的(因為沒有更短的路到達它)。那麼這個點就找到了, 因此我們每次只需要找到當前距離起點最短的點即可(前提這個點之前沒有被使用過,也就是不是之前已經確定過的點);

**實現:

#include #include using namespace std;

int cost[max_v][max_v];

int d[max_v];

bool used[max_v];

int v; //表示頂點的數量

void dijkstra(int s) //s代表起點

{ fill(d, d+v, inf);

fill(used, used+v, false);

d[s] = 0;

while(true)

{ int v = -1;

for(int i= 0; id[i])) v = i; //找到距離最小的節點

if(v == -1) break;

used[v] = true;

for(int i=0; i

單源最短路演算法 Dijkstra

dijkstra演算法是單源最短路演算法,可以求解不帶負權邊的圖中,從源點s到其它所有點的最短路。時間複雜度近似o n 2 可以用堆優化。一般用鄰接表,也可用鄰接矩陣。在稠密圖上會有較好的效能表現。include include using namespace std int s,t,n,m,las...

單源最短路 Dijkstra演算法

本文 自王陸的文字,僅作學習使用。dijkstra 迪傑斯特拉 演算法是典型的單源最短路徑演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。問題描述 在無向圖 g v,e 中,假設每條邊 e i 的長度為 w i 找到由頂點 v0 到...

單源最短路 Dijkstra演算法

返回上一級 author 張海拔 update 2015 03 11 link dijkstra演算法 總的來說 演算法從開始節點,按照總路徑權值非遞減的順序去搜尋所有路徑,直到發現指定的終止節點或發現全部節點為止。我們先看看演算法的步驟 演算法是遞推的 先設d begin 0,d others i...