Bellman-Ford
算法思想
枚举n次,每次枚举每一条边,如果dis[u] > dis[v]+w[v][u],则dis[u] = dis[v]+w[v][u],如果图没有负环则最多跑n-1次,否则可以一直跑下去
模板
bool Bellman_Ford(int s) { memset(dis,inf,sizeof dis); dis[s] = 0; bool flag; for(int i = 1; i <= n; i++) //n个点 { flag = false; for(int j = 0; j < m; j++) //m条边 { int x = edge[j].u; int y = edge[j].v; int z = edge[j].w; if(dis[y] > dis[x]+z) { dis[y] = dis[x]+z; flag = true; } } if(!flag) break; if(i==n && flag) return false;//存在负环 } return true; }