- finds single source shortest path like [[Dijkstra's Algorithm]] - but unlike Dijkstra, can handle negative weight cycles - procedure updates all edges |V| - 1 times - detects negative cycles with 1 extra round of BF - runtime is $O(|V| * |E|)$