登 录
对于权值非负的有向图单源最短路径求解,可以用Dijkstra算法。
伪代码:Dijkstra(G, w, s) { for each vertex v in G { distance[v] = infinite parent[v] = NULL color[v] = WHITE } distance[s] = 0 insert the vertexes into distance minimum heap Q while (!Q.empty()) { u = ExtractMim(Q) color[u] = BLACK for each edge (u, v) { if (color[v] == WHITE) { if (distance[v] > distance[u] + w[u][v]) { distance[v] = distance[u] + w[u][v] parent[v] = u } Decrease-Key(v) } } } } 如果使普通最小堆,该算法的算法复杂度为O((E+V)logV)。 如果使用斐波那契堆,ExtractMin操作耗时O(logV),DecreaseKey操作耗时O(1),所以算法复杂度为O(VlogV + E)。
抱歉!评论已关闭.