Dijkstra算法:用于解决 非负路权 单源 最短路问题
无优化的Dijkstra算法
int N, G[maxn][maxn] = {
0 }; //N为结点数目(编号0 ~ N-1)
int d[maxn], pre[maxn]; //G为邻接矩阵,G[u][v]=0表示 u、v无通路
bool vis[maxn] = {
false };
void Dijkstra(int s) //s为起点
{
fill(d, d + maxn, INF);
fill(pre, pre + maxn, -1); //-1表示无前驱结点
d[s] = 0; //起点s到自身距离为0,其他全为INF
for (int i = 0; i < N; i++)
{
int u, Min = INF; //找到 未访问的结点 中 d最小的———— u

Dijkstra算法主要用于解决非负路权的单源最短路径问题。通过优化,利用优先队列可以在O(logN)的时间复杂度内找到未访问节点中d值最小的。优化策略是仅将更新过的未访问节点加入优先队列,避免重复添加导致的效率降低。注意,队列中可能包含d值相同的节点,需额外处理。

7245

被折叠的 条评论
为什么被折叠?



