最短路(dijkstra、堆优化dijkstra、bellman-ford、spfa、floyd)
作者:互联网
一、朴素dijkstra算法(基于贪心)
//重复n-1次,每次在剩下的未确定最短路的点中,找距离源点最近的点,用这个距离来更新每个点到源点的距离 int dijkstra() { memset(dist, 0x3f, sizeof dist); dist[1] = 0; for (int i = 0; i < n - 1; i ++ ) //n-1次 { int t = -1; //每次找到第一个未确定最短距离的点j,用j更新t,以这个t为基准,继续寻找比它距离源点更小的点 for (int j = 1; j <= n; j ++ ) if (!st[j] && (t == -1 || dist[t] > dist[j])) //更新条件 t = j; //最终找到当前未确定最短路的点中距离源点最短的点 for (int j = 1; j <= n; j ++ ) //用找到的点的距离更新所有点的距离(三角不等式) dist[j] = min(dist[j], dist[t] + g[t][j]); st[t] = true; } if (dist[n] == 0x3f3f3f3f) return -1; return dist[n]; }
标签:dist,int,未确定,短路,源点,bellman,ford,dijkstra 来源: https://www.cnblogs.com/Mercury1988/p/16052998.html