1. 程式人生 > >模板-BellmanFord的實現(無優化)

模板-BellmanFord的實現(無優化)

clas col pre 復制 push_back end con urn 實現

  本篇文章中,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的實現(無優化)