Dijkstra: with binary heap, requires non-negative edges, cannot detect cycles. Best for standard shortest path problems. Bellman-Ford: complexity, handles negative edges, detects cycles. Use when negative weights are possible. SPFA: average case, worst case, handles negative edges, detects cycles.
Best practical choice when negative weights are possible. Choose based on edge weights and whether you need cycle detection. Dijkstra is faster but more restrictive. Bellman-Ford is slower but more general.