zoukankan      html  css  js  c++  java
  • Bellman-Ford算法——最短路径问题

    ´这个方法基于一点:最短路最多只经过n-1个节点(如果没有负环)
    ´首先,没有负环;
    ´然后对于其余的环,我们总可以选择不通过这些环而长度不会更差;
    ´因此,实际上我们可以通过采取n-1轮对于所有边的松弛操作解决该问题。
     
    ´算法流程:
    ´初始化dis数组
    ´进行n-1轮操作
    ´每一轮依次检查每一条边,进行松弛操作
    ´n-1轮操作结束后,dis数组即记录单源最短路径的信息
     
    ´实际上当把这算法用于判断是否有负环的时候,我们只需要查看在n-1轮松弛之后,再进行一轮松弛检验,如果仍存在松弛,那么一定存在负环
     
    #include <bits/stdc++.h>
    using namespace std;
    
    const int maxn=1000;
    const int maxm=10000;
    const int oo=100000000;
    int n,m,x[maxm],y[maxm],z[maxm];
    int dis[maxn];
    int main()
    {
        scanf("%d%d",&n,&m);
        for (int i=1;i<=m;i++)
        {
            scanf("%d%d%d",&x[i],&y[i],&z[i]);
        }
        for (int i=2;i<=n;i++) dis[i]=oo;
        for (int i=1;i<n;i++)
         for (int j=1;j<=m;j++)
          if (dis[x[j]]!=oo && dis[y[j]]>dis[x[j]]+z[j])
           dis[y[j]]=dis[x[j]]+z[j];
        for (int j=1;j<=m;j++)
         if (dis[x[j]]!=oo && dis[y[j]]>dis[x[j]]+z[j])
          {
                printf("-1
    ");
                return 0;
                }
        for (int i=1;i<=n;i++) 
             printf("%d ",dis[i]);
        printf("
    ");
        return 0;
     } 
  • 相关阅读:
    扩展AuthorizeAttribute
    扩展ValidationAttribute 1
    动态linq to list排序
    CSS属性书写顺序及命名规则
    增强网站可访问性的25种方法
    -webkit-filter是神马?
    docker安装
    docker的体系结构
    docker和虚拟化
    初识docker——docker基本概述
  • 原文地址:https://www.cnblogs.com/9pounds15pence/p/6349691.html
Copyright © 2011-2022 走看看