Added Bellmann Ford in Go #565
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Add Bellman-Ford Shortest Path Algorithm in Go
Added an implementation of the Bellman-Ford algorithm for finding the single-source shortest paths in a weighted, directed graph. This algorithm is particularly useful because it correctly handles graphs with negative edge weights and is capable of detecting negative-weight cycles reachable from the source.
Features 🚀
Calculates the shortest distance from a single source node to all other nodes in the graph.
Successfully handles both positive and negative edge weights.
Detects if a negative-weight cycle is reachable from the source node, returning an explicit boolean flag.
If a negative cycle is found, it correctly indicates that shortest paths are undefined by returning nil distance and parent maps.
Includes a comprehensive test suite covering cases with positive weights, negative weights, negative cycles, and disconnected components.
Complexity Analysis 📊
Time Complexity
O(V⋅E), where V is the number of vertices and E is the number of edges. This makes it suitable for most graphs but can be slower than Dijkstra's on graphs that are guaranteed to have no negative-weight edges.
Space Complexity
O(V+E) to store the graph structure (edge list and adjacency list), distances, and parent pointers.