图的最短路径算法(四)--Bellman-Ford(解决负权边)单源点最短路径

原创 2016年08月29日 22:06:15
//含有负权边的单源点最短路径
//动态规划思想:两点之间的最短路径最多经过n-1边即可到达
//那么依次更新经过1条边,2条边,...,n-1条边的最短路径

#include<stdio.h>
int main()
{
    int dis[10],bak[10],i,k,n,m,u[10],v[10],w[10],check,flag;
    int inf=99999999;
    //读入n和m,n表示顶点个数,m表示边的条数
    scanf("%d %d",&n,&m);

    //读入边
    for(i=1;i<=m;i++)
    {
        scanf("%d %d %d",&u[i],&v[i],&w[i]);
    }

    //初始化dis数组,这里是1号顶点到其余各顶点的初始路程
    for(i=1;i<=n;i++)
        dis[i]=inf;
    dis[1]=0;

    //Bellman-Ford算法核心语句
    for(k=1;k<=n-1;k++)
    {
        //将dis数组备份到bak数组中
        for(i=1;i<=n;i++)
            bak[i]=dis[i];
        //进行一轮松弛
        for(i=1;i<=m;i++)
            if(dis[v[i]]>dis[u[i]]+w[i])     //这里好像将图的边看成了有向边
            dis[v[i]]=dis[u[i]]+w[i];
        //松弛完毕后检测dis数组是否有更新
        check=0;
        for(i=1;i<=n;i++)
            if(bak[i]!=dis[i])
        {
            check=1;
            break;
        }
        if(check==0)
            break;    //数组没有更新,提前退出循环算法
    }
    //检测负权回路
    flag=0;
    for(i=1;i<=m;i++)
        if(dis[v[i]]>dis[u[i]]+w[i])
        flag=1;
    if(flag==1)
        printf("此图含负权回路");
    else
    {
        //输出最终结果
        for(i=1;i<=n;i++)
            printf("%d ",dis[i]);
    }
    return 0;
}

/*
5 5
2 3 2
1 2 -3
1 5 5
4 5 2
3 4 3
*/

版权声明:本文为博主原创文章,未经博主允许不得转载。

单源点最短路径Bellman算法实现

一、数据集形式 其中:6105(节点个数) 7035(边数) 0(id) 1609(起始边) 1622(终边) 57.403187(权重)二、数据集上传中等待审核成功再链接过来三、实现代码 #in...

Bellman-Ford算法--解决负权边的单源最短路径算法

在http://blog.csdn.net/hacker_zhidian/article/details/54915152这篇博客中,我们用Dijkstra算法单源最短路径,但是Dijkstra算法对...

图--单源最短路径 -Bellman Ford 算法(可以存在负权边的情况和负权回路)算法导论p362

Bellman Ford 算法  可以存在负权边的情况下解决单源最短路问题和,当出现负权回路时返回布尔值0,不然,则返回1,并可以源点到各点输出最短路径 主要步骤: 1、建立图(连接矩阵); 2、运行...

最短路径基本介绍(3)--Bellman-Ford算法(单源最短路径算法,可求负权)

转载链接:http://www.wutianqi.com/?p=1912 Dijkstra算法是处理单源最短路径的有效算法,但它局限于边的权值非负的情况,若图中出现权值为负的边,Dijkstra算...

单源点最短路径

  • 2015年11月24日 18:24
  • 2KB
  • 下载

图算法 单源最短路径 Bellman_Ford算法(边权值为负情况)

一、前瞻   在之前的单源最短路径Dijkstra算法中,博主给出了最短路径的一些基本概念和问题,并且给出了对权值不能为负的图使用Dijkstra算法求解单源最短路径问题的方法。   我们提到,D...
  • tham_
  • tham_
  • 2015年05月27日 17:14
  • 878

单源点最短路径程序

  • 2016年01月03日 12:56
  • 14KB
  • 下载

单源点最短路径

  • 2014年03月30日 17:16
  • 13KB
  • 下载

K最短路问题(单源点最短路径+A*算法)

/* *算法引入: *在单源点最短路径问题中,实际运用时还需知道最短路径外,次短路或者第三短路; *即要知道多条最短路,并排出其长度增加的顺序,即为K最短路问题; * *算法思想: *单源...
  • Jarily
  • Jarily
  • 2013年05月01日 14:27
  • 8548

PKU1062(昂贵的聘礼)单源点最短路径-Dijkstra算法

/****************************************************** 题目大意: 看着比英文还蛋疼的中文题; 每个物品看成一个节点,酋长的允诺也看作一个物品,...
  • Jarily
  • Jarily
  • 2013年04月12日 22:23
  • 748
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:图的最短路径算法(四)--Bellman-Ford(解决负权边)单源点最短路径
举报原因:
原因补充:

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