美文网首页
图的算法

图的算法

作者: yingtaomj | 来源:发表于2017-04-30 20:00 被阅读12次
求起点到其他所有点的最短距离:
  • Bellman_Ford算法
//初始化:
    //对于起点 dis[vs]=0
    //对于其他点 dis[i]=INF
//遍历nodenum - 1遍
    //遍历所有边
      if(dis[edge[j].v] > dis[edge[j].u] + edge[j].cost)
        dis[edge[j].v] = dis[edge[j].u] + edge[j].cost;
        pre[edge[j].v] = edge[j].u;
//检查是否有负权回路
//在遍历了nodenum - 1遍后
  //如果还有
  dis[edge[j].v] > dis[edge[j].u] + edge[j].cost
  //则存在负回路,没有最短路径
  • Dijkstra
//遍历nodenum - 1遍
    //找到最短距离dist[j]和该点j,即到该点最短距离已经求出
    //更新剩下没有找到最短路径的点,如果从原点到j再到该点距离比之前更短,那么更新dist[i]和
最大网络流算法
  • Edmonds_Karp
while (1)
{
    //初始化:p和pre置零,p.push(start)
    //p不为空:
        //对所有p中元素遍历,将和该结点相邻的所有点push进p,并记pre[i]=该点
    if (pre[end] == 0)//找完了
        break;
    //否则更新
    //从end到start,遍历pre[i],找到最小的dp[i][j]=minflow
    //更新dp,从end到start
    {
        dp[pre[i]][i] -= minflow;
        dp[i][pre[i]] += minflow;
    }
}

代码:http://pan.baidu.com/s/1dF7qbAh

最小生成树算法
  • Prim普利姆算法
    每次都连接和已经标记的所有点的距离最短的那个点。
  • Kruskal克鲁斯卡尔算法
    每次只找没有标记的边中边长最短的,不管已经标记过的点。如果选择该边后构成回路则放弃该边重新选择。

相关文章

  • 头条-手撕代码

    [toc] 图算法 以及最短路径算法 树算法 手写LRU 排序算法 链表算法

  • 数据结构-广度优先寻路与A星寻路算法-C#

    概述: 广度优先算法: 是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短...

  • BFS算法示例 - 解开密码锁的最少次数

    概念 BFS(广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。 BFS算法的核心思...

  • 史上最清晰的 Tarjan 算法详解

    摘要:图的算法是进行静态分析的基础数据算法,如何提高图的分析效率,就需要对图的算法有进一步的认识。 1.引言 在静...

  • 【算法】基本的图算法

    图的搜索技巧是整个图算法领域的核心。 图的表示 有两种标准方法:1.邻接链表2.邻接矩阵 邻接链表是将一个结点所有...

  • 图图算法

    数组聚合 需求 当我们有一个一维数组,我们希望把它按照某个类型聚合成二维数组;形如下面。 解答 思考:巧妙的地方在...

  • 有向图和最短路径Dijkstra、Bellman-Ford、Fl

    本篇开始讨论关于有向图的算法,无向图是特殊的有向图。内容概要: 有向图的实现 最短路径经典算法实现 有向图的实现 ...

  • tarjan算法

    tarjan算法前提 一个关于图的联通性的神奇算法。基于DFS(深度搜索)算法,深度优先搜索一张有向图。!注意!是...

  • 图的算法

    求起点到其他所有点的最短距离: Bellman_Ford算法 Dijkstra 最大网络流算法 Edmonds_K...

  • 最短路径

    图的两种搜索算法,深度优先搜素和广度优先搜索。这两种算法主要是针对无权图的搜索算法。针对有权图,也就是图中的每条边...

网友评论

      本文标题:图的算法

      本文链接:https://www.haomeiwen.com/subject/ajvxtxtx.html