On this page
article
Bellman-Ford
Sobre
Calcula a menor distancia
entre a e todos os vertices e
detecta ciclo negativo
Retorna 1 se ha ciclo negativo
Nao precisa representar o grafo,
soh armazenar as arestas
O(nm)
Link original: bellmanFord.cpp
Código
int n, m;
int d[MAX];
vector<pair<int, int>> ar; // vetor de arestas
vector<int> w; // peso das arestas
bool bellman_ford(int a) {
for (int i = 0; i < n; i++) d[i] = INF;
d[a] = 0;
for (int i = 0; i <= n; i++)
for (int j = 0; j < m; j++) {
if (d[ar[j].second] > d[ar[j].first] + w[j]) {
if (i == n) return 1;
d[ar[j].second] = d[ar[j].first] + w[j];
}
}
return 0;
}