首页 > 其他 > 详细

模板-BellmanFord的实现(无优化)

时间:2017-10-09 20:37:59      阅读:276      评论:0      收藏:0      [点我收藏+]

  本篇文章中,bellmanFord代码有一半都是判断负权回路。复制粘贴无误。

  核心代码:

vector <node>::iterator it;
for (it=map[j].begin();it!=map[j].end();it++) {
    node e= *it;
    if (e.w!=inf && dist[e.to]>dist[j]+e.w) dist[w.to]=dist[j]+e.w;
}

  如此下来,只需要将dist数组初始化,就可以实现了。完整代码如下,仅供参考。

 1 #include <cstdio>
 2 #include <vector>
 3 using namespace std;
 4 
 5 const int MAXN=200;
 6 const int inf=0x3f3f3f3f;
 7 struct node {
 8     int to,w;
 9 };
10 vector <node> map[MAXN];
11 int m,n,dist[MAXN];
12 
13 bool ford(int s) {
14     int i,j,k;
15     for (i=1;i<=n;i++) dist[i]=inf;
16     dist[s]=0;
17     for (i=1;i<=n-1;i++) {
18         for (j=1;j<=n;j++) {
19             if (dist[j]==inf) continue;
20             vector <node>::iterator it;
21             for (it=map[j].begin();it!=map[j].end();it++) {
22                 node e= *it;
23                 if (e.w!=inf && dist[e.to]>dist[j]+e.w) {
24                     dist[e.to]=dist[j]+e.w;
25                 }
26             }
27         }
28     }
29     for (j=1;j<=n;j++) {
30         if (dist[j]==inf) continue;
31         vector <node>::iterator it;
32         for (it=map[j].begin();it!=map[j].end();it++) {
33             node e= *it;
34             if (e.w!=inf && dist[e.to]>dist[j]+e.w) {
35                 return false;
36             }
37         }
38     }
39     return true;
40 }
41 
42 int main() {
43     int k,i,j,w;
44     scanf("%d%d",&m,&n);
45     for (k=1;k<=m;k++) {
46         scanf("%d%d%d",&i,&j,&w);
47         node e;
48         e.to=j;
49         e.w=w;
50         map[i].push_back(e);
51     }
52     ford(1);
53     for (i=1;i<=n;i++) {
54         printf("%d\n",dist[i]);
55     }
56     return 0;
57 }

 

模板-BellmanFord的实现(无优化)

原文:http://www.cnblogs.com/wuyuema/p/7642704.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!