單源最短路徑(dijkstra演算法)

2021-07-03 07:56:44 字數 973 閱讀 5250

#include #include #include #include #include using namespace std;

typedef int graph_weight_t;

typedef char graph_vertex_id_t;

struct graph_t ;

/*** @param[in] start 起點

* @param[out] dist dist[v] 存放的是起點到v 的最短路徑長度

* @param[out] father father[v] 存放的是最短路徑上指向v 的上乙個頂點

*/void dijkstra(const graph_t &g, graph_vertex_id_t start,

map&distance,

map&father) }}

return;

}/**

* @brief 列印從起點到終點的最短路徑

* @param[in] father dijkstra 計算好的father 陣列

* @param[in] end 終點

*/void print_path(const map&father,

graph_vertex_id_t end) else

} /** 讀取輸入,構建圖. */

void read_graph(graph_t &g)

}int main()

}return 0;

}/* test

輸入資料:

8a c 10

a e 30

a f 100

b c 5

c d 50

d f 10

e d 20

e f 60

輸出:a->c

a->e->d

a->e

a->e->d->f

*/

Dijkstra 單源最短路徑

演算法思想 輔助陣列dis i 表示當前源頂點到i的最短路徑。dis i 在程式未結束前,類似於動態規劃,可更新以取得最小值 陣列path用來記錄路徑 首先初始化令dis i 為edge v0 i v0為源頂點 然後選擇離源頂點最小的路徑,加入到構造最短路徑的點集合中,然後看是否可以更新dis i ...

Dijkstra 單源最短路徑

演算法思想 輔助陣列dis i 表示當前源頂點到i的最短路徑。dis i 在程式未結束前,類似於動態規劃,可更新以取得最小值 陣列path用來記錄路徑 首先初始化令dis i 為edge v0 i v0為源頂點 然後選擇離源頂點最小的路徑,加入到構造最短路徑的點集合中,然後看是否可以更新dis i ...

Dijkstra單源最短路徑

dijkstra單源最短路徑 給定乙個帶權有向圖g v,e 其中每條邊的權是乙個非負實數。另外,還給定 v 中的乙個頂點,稱為源。現在我們要計算從源到所有其他各頂點的最短路徑長度。這裡的長度是指路上各邊權之和。這個問題通常稱為單源最短路徑問題。下面給出兩個計算單源最短路徑的模板。dijkstra 簡...