码迷,mamicode.com
首页 > 编程语言 > 详细

Bellman算法模板

时间:2015-09-01 10:39:36      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:

 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;
 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             d[e[j].to]=d[e[j].from]+e[j].c;
28        }
29     }
30     for(int i=0;i<2*m;i++)//如果持续更新,则抛出错误
31         if(d[e[i].to]>d[e[i].from]+e[i].c)
32         return true;
33     return false;
34 }
35 int main()
36 {
37     while(scanf("%d%d",&n,&m)!=EOF)
38     {
39         for(int i=0;i<2*m;i+=2)//人为付成无向图
40         {
41            scanf("%d%d%d",&e[i].from,&e[i].to,&e[i].c);
42            e[i+1].from=e[i].to;
43            e[i+1].to=e[i].from
44            e[i+1].c=e[i].c;
45         }
46         if(Bellman_ford(1))
47             printf("-1\n");//并不是能计算负权值,而是能将存在负权值得情况报出出错误
48         else
49         {
50             for(int i=2;i<=n;i++)
51                 printf("%d %d\n",i,d[i]);
52         }
53     }
54     return 0;
55 }

 

Bellman算法模板

标签:

原文地址:http://www.cnblogs.com/tianmin123/p/4775022.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!