1. 程式人生 > >Bellman-ford 模板

Bellman-ford 模板

class man () inf nbsp 導致 color col eof

#include<bits/stdc++.h>
const int inf=0x3f3f3f3f;
const int maxn=1e5+5;
struct edge{
    int u,v;//兩個點 
    int w;    //權值 
     Edge(int _u = 0, int _v = 0, int _w = 0): u(_u), v(_v), w(_w) {}
};
int dis[maxn];//松弛更新數組
vector<edge>e;//用容器存邊 
//如果存在從源點可達的權為負的回路。則 應為無法收斂而導致不能求出最短路徑
int bellman_ford(int
s,int n) { memset(dis,inf,sizeof(dis)); dis[s]=0; //最多做n-1次 for(int i=1;i<n;i++) { int flag=0; for(int j=0; j<int(e.size()); j++) { if(dis[e[j].v] > dis[e[j].u] + e[j].w) { dis[e[j].v] = dis[e[j].u] + e[j].dis; flag
=1; } } if(flag==0) return 1;//沒有負權回路 } //有負權回路 for(int j=0; j < int(e.size()); j++) { if(dis[e[j].v] > dis[e[j].u] + e[j].w) return 0; } return 1; }

Bellman-ford 模板