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

Posted Pyl0j

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板-BellmanFord的实现(无优化)相关的知识,希望对你有一定的参考价值。

  本篇文章中,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的实现(无优化)的主要内容,如果未能解决你的问题,请参考以下文章

HDU 1874 SPFA/BellmanFord/Dijkstra/Floyd

最短路(floyd/dijkstra/bellmanford/spaf 模板)

POJ 3259 Wormholes

无标题CSDN发布模板水文

无标题CSDN发布模板水文

无标题CSDN发布模板水文