BellmanFord算法框架

原创 2012年03月21日 16:20:47
/*-------------------------------------------------------------------
 * Purpose:
 *         BellmanFord算法
 * Time:
 *         2012年3月21日 16:04:00
 * Author:
 *         张彦升
 -------------------------------------------------------------------*/

#define V 9     /*顶点数*/
#define E 12     /*边数*/

const int inf = 0x3f3f3f3f;
int n,m,pre[V];

struct Edge
{
    int u;
    int v;
    int w;
};
Edge edge[E];   /*边表*/
int dist[V];

/**
 * 松弛函数
 */
int relax(int u,int v,int c)
{
    if (dist[v] > dist[u] + c)
    {
        dist[v] = dist[u] + c;
        pre[v] = u;
        return 1;
    }
    return 0;
}
/**
 * 数据初始化
 */
void init_single_source()
{
    for (int i = 0;i < n,i++)
    {
        dist[i] = inf;
        pre[i] = -1;
    }
    return;
}
int bellman(int src)
{
    init_single_source();
    dist[src] = 0;
    bool flag;

    for (int i = 0;i < n;i++)
    {
        flag = false;
        for (int j = 0;j < m;j++)
        {
            if (1 == relax(edge[j].u,edge[j].v,edge[j].w))
            {
                flag = true;
            }
        }
        if (flag == false)
        {
            break;
        }
    }
    /**
     * 对负权回路进行检查
     */
    for (int j = 0;j < m;j++)
    {
        if (1 == relax(edge[j].u,edge[j].v,edge[j].w))
        {
            return 0;
        }
    }
    return 1;
}

[算法系列之二十九]Bellman-Ford最短路径算法

单源最短路径给定一个图,和一个源顶点src,找到从src到其它所有所有顶点的最短路径,图中可能含有负权值的边。Dijksra的算法是一个贪婪算法,时间复杂度是O(VLogV)(使用最小堆)。但是迪杰斯...
  • SunnyYoona
  • SunnyYoona
  • 2015年04月23日 15:15
  • 3493

最短路知识点总结(Dijkstra,Floyd,SPFA,Bellman-Ford)

最短路知识点总结(Dijkstra,Floyd,SPFA,Bellman-Ford) Dijkstra算法: 解决的问题:     带权重的有向图上单源最短路径问题。且权重都为非...
  • qq_33406883
  • qq_33406883
  • 2016年07月20日 17:55
  • 1365

BellmanFord判环算法

转自 http://blog.csdn.net/niushuai666/article/details/6791765Dijkstra算法是处理单源最短路径的有效算法,但它局限于边的权值非负的情况,若...
  • L123012013048
  • L123012013048
  • 2015年09月16日 16:59
  • 298

Bellman-Ford——C++实现版

// Bellman_Ford.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #define MAX_VALUE 1...
  • u012102306
  • u012102306
  • 2015年11月18日 12:34
  • 619

最短路径算法—Dijkstra算法和BellmanFord算法

松弛操作Dijkstra算法和BellmanFord算法都是基于这个简单的操作。 下面我们来了解这个简单而重要的操作: 线松弛 线松弛也就是处理 起点到边的两个顶点距离与两个顶点直接距离的问题。...
  • luoz_java
  • luoz_java
  • 2016年09月24日 23:17
  • 263

找负环 bellman ford 算法

#include #include #include #include #include #include #include #include #include #include ...
  • qq_34271269
  • qq_34271269
  • 2016年07月15日 20:44
  • 480

POX控制器下bellmanford算法的实现

bellemanford的实现如下: [Goal]   Based on [url=https://github.com/CPqD/RouteFlow/blob/master/pox/pox/fo...
  • u010423240
  • u010423240
  • 2015年11月24日 15:29
  • 416

算法导论——24.1 BellmanFord算法java实现

Bellman - ford算法是求含负权图的单源最短路径算法,效率很低,但代码很容易写。其原理为持续地进行松弛(原文是这么写的,为什么要叫松弛,争议很大),在每次松弛时把每条边都更新一下,若在n-1...
  • The_sam
  • The_sam
  • 2017年05月08日 21:43
  • 404

spfa算法(FIFO优化的BellmanFord算法)

spfa算法用FIFO队列代替BellmanFord算法的循环检查,所以在效率上是相当不错的; struct Edge { int from;//出发结点 int to;//...
  • LeeHolmes
  • LeeHolmes
  • 2016年05月24日 23:49
  • 311

几个最短路径算法Floyd、Dijkstra、Bellman-Ford、SPFA的比较

几个最短路径算法的比较: Floyd        求多源、无负权边的最短路。用矩阵记录图。时效性较差,时间复杂度O(V^3)。        Floyd-Warshall算法(Floyd-...
  • zs520ct
  • zs520ct
  • 2016年04月22日 17:05
  • 1983
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BellmanFord算法框架
举报原因:
原因补充:

(最多只允许输入30个字)