单源最短路(bellman-ford算法+dijkstra算法)+任意两点最短路(floyd-warshall算法)

Posted 姿态H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单源最短路(bellman-ford算法+dijkstra算法)+任意两点最短路(floyd-warshall算法)相关的知识,希望对你有一定的参考价值。

ps:本来是复习图论的,最后变成了预习,隔了一段时间简直了,重新学过!

哈哈哈哈哈哈哈,,真的菜啊!

 

   单源最短路问题是求,,固定一个起点,求它到其他所有点的最短路问题。

  两点之间最短路是求,固定起点和终点求最短路

两者没有根本区别,复杂度也是一样的

 

1,单源最短路1 bellman-ford算法

核心算法:

d[i]=min(d[j]+(从顶点j到顶点i边的权值),d[i])

d【i】表示任意点到顶点i的最短距离

一般初始化为INF,,然后起点d【s】初始化0。

只要图中不存在负圈(负圈是指两点间权值为负数所形成的圈)更新操作就是有限的

struct edge// 从顶点from——>to的权值为cost的边
{
    int from;   
    int to;
    int cost;
};
edge es[maxn];  //
int d[maxn];    //最短距离
int v,b;        //分别为顶点和边数
void bellman(int s)//从顶点开始递归
{
   for(int i=0;i<v;i++)
        d[i]=INF;//先把所有顶点的最短距离设为最大,排除自圈
   d[s]=0;//初始化起点
   while(true)
   {
       bool vis=false;
       for(int i=0;i<b;i++)
       {
           edge e=es[i];
           if(d[e.from]!=INF&&d[e.to]>d[e.from]+e.cost)
           {
               d[e.to]=d[e.from]+e.cost;
               update=true;
           }
       }
       if(!update)break;
   }
   
}

算了找到了大佬的详细思路,我看懂了再来补把

 

bellman-ford算法:http://www.wutianqi.com/?p=1912

 

dijkstra算法:http://www.wutianqi.com/?p=1890

 

 

 floyd算法:http://www.wutianqi.com/?p=1903

 

以上是关于单源最短路(bellman-ford算法+dijkstra算法)+任意两点最短路(floyd-warshall算法)的主要内容,如果未能解决你的问题,请参考以下文章

算法笔记-----单源最短路径之Bellman-Ford算法

算法入门之完美单源最短路径:Bellman-Ford(贝尔曼-福特)算法

单源最短路(bellman-ford算法+dijkstra算法)+任意两点最短路(floyd-warshall算法)

单源最短路径---Bellman-Ford算法

Bellman-Ford算法解决单源最短路问题

(模板)hdoj2544(最短路--bellman-ford算法)