Why does Dijkstra's algorithm fail when an edge has a negative weight, and what do you use instead?
Dijkstra settles a node as soon as it has the smallest tentative distance, and it assumes no later route can improve it. That assumption relies on every edge weight being non negative, because a negative edge could make a route through a node you have already passed come out cheaper. With a negative edge, the node you settled can turn out not to be settled at all, and the algorithm returns wrong distances.
Bellman-Ford makes no such assumption. It relaxes every edge of the graph repeatedly, one pass at a time, and after enough passes every shortest distance is correct. A shortest path uses at most V minus one edges, so V minus one passes are always sufficient.
The mechanism is that each pass propagates one more edge of any path. After the first pass, all paths of one edge are correct, after the second all paths of two edges, and so on, so after V minus one passes every shortest path has been accounted for.
The trade-off to name is the cost. Bellman-Ford runs in O of V E time, which is much worse than the heap version of Dijkstra. Its compensation is that it handles negative weights and can detect negative cycles, which Dijkstra cannot do at all. The other thing worth saying is that an early exit makes it much faster in practice: if a full pass changes nothing, the distances have converged and you can stop, which is usually the case when the graph is close to acyclic.