c++: Bellman-Ford用于进阶Dijkstra算法实现;SPFA用于进阶Bellman-Ford算法优化;Dijkstra算法结合DFS用于求解点权最大路径问题;Bellman-Ford算法通过松弛操作优化最短路径计算
发布时间
阅读量:
阅读量
每轮处理过程中需对图中的所有边进行遍历,其时间复杂度为O(NE),即顶点数量与边数的乘积。
Bellman算法在处理时关注的是与当前节点相连的所有边,通常采用邻接表的方式来实现。
Bellman-Ford算法给我留下的印象是,它通过每个节点所连接的所有边不断进行扩展,每个节点的每条边可能被多次访问,呈现出向四周持续扩散的趋势。
Dijkstra算法则显得更加有序,每一步都确定一个最短路径节点,且每条边在整个过程中仅被访问一次。
Bellman:有负值的时候需要判断,如果源点到的最短路径上有负值就返回false
fill(dist, dist + N, INF);
dist[s] = 0;
int v, dis;
for (int i = 0; i < N-1; i++)
{
for (int u = 0; u < N; u++) {
for (int j = 0; j < Adj[u].size(); j++)
{
v = Adj[u][j].vertex;
dis = Adj[u][j].distance;
if (dist[v] > dist[u] + dis) {
dist[v] > dist[u] + d
全部评论 (0)
还没有任何评论哟~
