前提:沒有負邊 (如果有負邊, 可以用此方法檢查是否有負圈)
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...