最短路问题

最短路

  一、单源最短路

      1、边为正值

          ①朴素dijkstra :适用于稠密图,eg(1<N<500,1<M<1e5)                                                     邻接表存图

          ②堆优化dijkstra :适用于稀疏图,点数与边数差不多,eg(1<N,M<1e5)

      2、边可能有负值

          ①bellman_ford :有边数限制的图                                                                                              存图方式随意      可用结构体链表

          ②spfa:应用广泛,可判负环。

  二、多源最短路

      floyd:三重循环,本身是个动态规划算法,在代码实现的时候省去了一维状态。

      原状态是:f[i, j, k]表示从i走到j的路径上除了i, j以外不包含点k的所有路径的最短距离。那么f[i, j, k] = min(f[i, j, k - 1), f[i, k, k - 1] + f[k, j, k - 1]。

      因此在计算第k层的f[i, j]的时候必须先将第k - 1层的所有状态计算出来,所以需要把k放在最外层。

posted @ 2020-01-31 16:44  007!  阅读(106)  评论(0编辑  收藏  举报