Bellman-Ford算法

//Bellman--Food解决负权边
//第一行读入n代表有1到n个节点,m表示有m个关系式
//接下来m行u[i],v[i],w[i],分别表示起点,终点,和之间的距离,求1到其余各店的最短距离。
#include <stdio.h>
 int main()
 {
     int u[101],v[101],w[101],dis[101];
     int i,j,k,n,m,flag;
     scanf("%d%d",&n,&m);
     for (i=1;i<=m;i++)
     {

         scanf("%d%d%d",&u[i],&v[i],&w[i]);//u[i]是起点,v[i]是终点,w[i]是从u[i]到v[i]的距离

     }
     for (i=1;i<=n;i++)
        dis[i]=10000;//初始化dis[i]的值都为无穷大
     dis[1]=0;//非常重要不能少,因为初始只知道到自身点距离为0
            for (k=1;k<=n-1;k++)//一共缩进放松n-1次
            {
               flag=0;//每一次开始时重置判断标识
            for (i=1;i<=m;i++)
            if (dis[v[i]]>dis[u[i]]+w[i])//如果经由u[i]到v[i]的距离比直接从1到v[i]的距离小
            {
            dis[v[i]]=dis[u[i]]+w[i];
            flag=1;
            }
                if (flag==0) break;
            }//如果整个缩进过程都没有再缩小说明已经得到结果了(这次都没缩进,那么接下来重复也不会缩进,只有每次循环中有点到1的距离缩进才可能使下一次缩进)
               for (j=1;j<=n;j++)
            printf("%d ",dis[j]);
            return 0;

 }











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值