zoukankan      html  css  js  c++  java
  • Bellman算法模板

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <algorithm>
     4 using namespace std;
     5 const int inf=1<<29;
     6 const int N=1001;
     7 int w[N][N],d[N];
     8 int u,v,c,m,n,k;
     9 struct node
    10 {
    11     int from;
    12     int to;
    13     int c;
    14 }e[N*N];
    15 bool Bellman_ford(int st)
    16 {
    17     for(int i=1;i<=n;i++)
    18     {
    19         d[i]=inf;
    20     }
    21     d[st]=0;
    22     for(int i=1;i<n;i++)
    23     {
    24        for(int j=0;j<=2*m;j++)
    25        {
    26            if(d[e[j].to]>d[e[j].from]+e[j].c)
    27            {
    28                d[e[j].to]=d[e[j].from]+e[j].c;
    29             //更新的是该点到起点的距离d[*],则其他通过(该点)的点回到起点的距离也有可能会被更新
    30             //所以要循环n-1次,保证所有边都能够更新完,(若每次循环都只更新一条边,就会更新n-1次);   
    31            }//与dij比较,更新后没有标记,可以持续更新;
    32 
    33        }
    34     }
    35     for(int i=0;i<2*m;i++)//如果持续更新,则存在负权环,抛出错误(如果是无向图,回路中只要存在一个负值,就会形成负权环)
    36         if(d[e[i].to]>d[e[i].from]+e[i].c)
    37         return true;
    38     return false;
    39 }
    40 int main()
    41 {
    42     while(scanf("%d%d",&n,&m)!=EOF)
    43     {
    44         for(int i=0;i<2*m;i+=2)//人为付成无向图
    45         {
    46            scanf("%d%d%d",&e[i].from,&e[i].to,&e[i].c);
    47            e[i+1].from=e[i].to;
    48            e[i+1].to=e[i].from;
    49            e[i+1].c=e[i].c;
    50         }
    51         scanf("%d",&k);
    52         if(Bellman_ford(k))
    53             printf("-1
    ");
    54         else
    55         {
    56             for(int i=2;i<=n;i++)
    57                 printf("%d %d
    ",i,d[i]);
    58         }
    59     }
    60     return 0;
    61 }
  • 相关阅读:
    全站防止SQL注入类
    asp.net 技术网站
    Tekla API 常见问题摘录整理
    C#退出程序结束线程
    C#MetroModernUI库应用实例 WinForm窗体UI的美化
    获取项目物理根目录绝对路径
    计算两个时间月数的差
    centos7安装wps软件
    10 安全运维管理 10.11备份与恢复管理
    10 安全运维管理 10.14外包运维管理
  • 原文地址:https://www.cnblogs.com/tianmin123/p/4775022.html
Copyright © 2011-2022 走看看