Dijkstra求單源最短路徑

2021-08-14 11:56:53 字數 1492 閱讀 9839

思路:dijkstra求解帶權有向圖的單源最短路徑問題。與bellman-ford演算法的區別是要求圖中沒有負的權值邊。在這種情況下dijkstra演算法通常有比較好的複雜度。特別是使用堆以後。演算法維護乙個點集s,該集合中的結點的最短路徑已經求出,演算法重複從結點集v-s中選擇最短路徑估計最小的結點,將其加入s中,並該結點出發的所有邊進行鬆弛。

**:

// dijkstra.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include #include #include #include #define max 100

#define inf 1000000

#define dis(a) (dis[a])

using std::cin;

using std::cout;

using std::endl;

using std::cerr;

using std::priority_queue;

using std::ifstream;

using std::stack;

typedef struct edge ;

class mycomparison

bool operator() (const int &a, const int &b) const };

//對邊(u,v)的鬆弛操作

void relax(int u, int v, int pre[max], int dis[max], int a[max][max])

}void dijkstra(int a[max][max], int vertex_num, int edge_num, int dis[max], int pre[max]) }}

//重構路徑

void reconstruct(int i, int pre[max], stack&s)

s.push(i); //加入本結點

while (pre[i] != -1) }

int main()

int dis[max]; //最短路徑權重

for (int i = 0; i < vertex_num; i++)

dis[i] = inf;

int pre[max]; //前驅結點

for (int i = 0; i < vertex_num; i++)

pre[i] = -1;

dis[0] = 0;

dijkstra(a, vertex_num, edge_num, dis, pre);

stacks; //用於重構路徑

Dijkstra求單源最短路徑

leetcode743 預定義 define mvnum 100 define imax 88888 無窮大 鄰接矩陣 typedef structmgraph 構造鄰接矩陣 int locatevex amgraph g,vertextype v return 1 int creategraph ...

Dijkstra演算法求單源最短路徑

與prim演算法樸素版實現起來差不多。樸素版dijkstra演算法 輸入乙個圖的矩陣,假定兩點不相鄰則權值為0 輸出每個頂點的最短路徑長度,可以列印指定頂點的路徑 dijkstra演算法跟prim演算法很像 相同的地方是 兩者都有乙個已經求得 mst 和已經求得 最短路 的集合 每納入乙個結點x到集...

Dijkstra演算法求單源最短路徑

dijkstra演算法求單源最短路徑 include include define vexsize 100 建立鄰接矩陣 int creat int cost vexsize return vexnum dijkstra演算法 void dijkstra int cost vexsize int v...