文档章节

Bellman - Ford算法c++实现(前向星)

侯禹
 侯禹
发布于 2013/09/24 23:38
字数 275
阅读 290
收藏 2
/*   Bellman - Ford   */
#include <iostream>
#include <cstdio>
#include <cstring>
#define Inf 0x7fffffff
#define MaxV 10000
#define MaxE 10000
using namespace std;
int N,M;
struct Edge
{
    int to,next,w;
}edge[MaxE];
int size,head[MaxV];
void InsertEdge(int from,int to,int w)
{
    edge[size].to=to;
    edge[size].w = w;
    edge[size].next=head[from];
    head[from]=size++;
}
int dist[MaxV];
bool bellmanFord(int s)
{
    int i,j,k;
    int to;
    for(i=1;i<=N;i++)
        dist[i]=Inf;
    dist[s]=0;
    for(i=1;i<=N-1;i++)                     //每个点都更新N-1 次
    {
        for(j=1;j<=N;j++)           //每个点更新一次
        {
            if(dist[j]==Inf)    continue;   //如果不能到达,则下一个点
            for(k=head[j];k+1;k=edge[k].next)
            {
                to=edge[k].to;
                if(edge[k].w!=Inf&&dist[to]>dist[j]+edge[k].w)
                    dist[to]=dist[j]+edge[k].w;
            }
        }
    }
    for(j=1;j<=N;j++)
    {
        if(dist[j]==Inf)    continue;   //如果不能到达这个点
        for(k=head[j];k+1;k=edge[k].next)
        {
            to=edge[k].to;
            if(edge[k].w!=Inf&&dist[to]>dist[j]+edge[k].w)
                return false;
        }
    }
    return true;
}
void init()
{
    int from,to,w;
    scanf("%d%d",&N,&M);
    size=0;
    memset(head,-1,sizeof(head));
    for(int i=0;i<M;i++)
    {
        scanf("%d%d%d",&from,&to,&w);
        InsertEdge(from,to,w);
    }
}
int main()
{
    freopen("in.txt","r",stdin);
    init();
    if(bellmanFord(1)) printf("OK");
    else printf("No");
    return 0;
}


© 著作权归作者所有

共有 人打赏支持
侯禹
粉丝 95
博文 49
码字总数 34362
作品 0
海淀
程序员
优秀博客推荐:各种数据结构与算法知识入门经典(不断更新)

基本算法 贪心算法:贪心算法 作者:独酌逸醉 贪心算法精讲 作者:3522021224 递归和分治:递归与分治策略 作者:zhoudaxia 图论 图的遍历(DFS和BFS): 图的遍历 作者:jefferent 最小生成...

索隆
2011/12/03
0
0
初学图论-Bellman-Ford单源最短路径算法

本文使用C++实现了这一基本算法。参考《算法导论》第24.1节 笔者使用了vector实现邻接链表,以提高运行效率。 /** * Bellman-Ford's Single Source Shortest Path Algorithm in C++ * Time C...

不高不富不帅的陈政_
2015/08/06
0
0
C语言/C++编程学习—绘制神奇代码之星空动态

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
03/26
0
0
C++ STL编程轻松入门 1

作为C++标准不可缺少的一部分,STL应该是渗透在C++程序的角角落落里的。STL不是实验室里的宠儿,也不是程序员桌上的摆设,她的激动人心并非昙花一现。本教程旨在传播和普及STL的基础知识,若...

暖冰
2015/11/21
0
0
【转载】数据结构利器之私房STL

数据结构利器之私房STL 此系列的文章适合初学有意剖析STL和欲复习STL的同学们。 学过c++的同学相信都有或多或少接触过STL。STL不仅仅是c++中很好的编程工具(这个词可能有点歧义,用类库更恰...

悠米海
2012/12/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 放假前期焦虑症晚期

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @andonny :分享Matteo的单曲《Panama》: 《Panama》- Matteo 手机党少年们想听歌,请使劲儿戳(这里) @新垣吉衣OSC :我发现只要去有小朋友...

小小编辑
15分钟前
21
4
wait()被notify()后,接着执行wait()后面的语句

wait()被notify()后,接着执行wait()后面的语句

noteman
46分钟前
1
0
Ubuntu集群-使用MAAS开始裸机安装

Ubuntu使用MAAS装机的七个步骤。 1、Setup your hardware You need one small server for MAAS and at least one server which can be managed with a BMC. It is recommended to have the M......

openthings
59分钟前
3
0
OSX | SafariBookmarksSyncAgent意外退出解决方法

1. 启动系统, 按住⌘-R不松手2. 在实用工具(Utilities)下打开终端,输入csrutil disable, 然后回车; 你就看到提示系统完整性保护(SIP: System Integrity Protection)已禁用3. 输入reboot回车...

云迹
今天
4
0
面向对象类之间的关系

面向对象类之间的关系:is-a、has-a、use-a is-a关系也叫继承或泛化,比如大雁和鸟类之间的关系就是继承。 has-a关系称为关联关系,例如企鹅在气候寒冷的地方生活,“企鹅”和“气候”就是关...

gackey
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部