Graph Algorithm Visualization

Explore pathfinding algorithms with interactive grid visualization

Click cells to toggle walls • Space to start/pause
0 Cells Visited
0 Path Length
0ms Time
DFS Algorithm
Pathfinding Grid

Legend

Start
End
Wall
Open Set
Visited
Path
Need Help?

Algorithm Background

Graph Theory and Pathfinding

Graph algorithms are fundamental to computer science and have applications ranging from GPS navigation to network routing, game AI, and social network analysis. A graph consists of vertices (nodes) connected by edges. In our grid visualization, each cell is a vertex, and adjacent cells are connected by edges.

The pathfinding problem seeks to find a sequence of vertices connecting a start vertex to a goal vertex. Different algorithms employ different strategies—some prioritize finding any path quickly, while others guarantee finding the shortest path.

Depth-First Search (DFS)

Strategy: DFS explores as far as possible along each branch before backtracking. It uses a stack (either explicit or via recursion) to remember which vertices to visit next.

Algorithm:

1. Start at the initial vertex and mark it as visited

2. For each unvisited neighbor, recursively apply DFS

3. Backtrack when no unvisited neighbors remain

Complexity:

  • Time: O(V + E) where V = vertices, E = edges
  • Space: O(V) for the recursion stack or explicit stack

Characteristics: DFS does not guarantee finding the shortest path. It explores deeply before exploring broadly, making it memory efficient but potentially slow if the goal is down a wrong branch. Useful for maze generation, detecting cycles, and topological sorting.

Applications: Solving puzzles, detecting connected components, generating mazes, topological sorting, and finding strongly connected components in directed graphs.

Breadth-First Search (BFS)

Strategy: BFS explores all vertices at distance k from the start before exploring vertices at distance k+1. It uses a queue to process vertices in the order they are discovered.

Algorithm:

1. Enqueue the start vertex and mark it as visited

2. While queue is not empty:

   a. Dequeue a vertex v

   b. For each unvisited neighbor u of v:

      - Mark u as visited

      - Enqueue u

      - Record parent for path reconstruction

Complexity:

  • Time: O(V + E)
  • Space: O(V) for the queue

Characteristics: BFS guarantees finding the shortest path in unweighted graphs. It explores layer by layer, ensuring all shorter paths are considered first. More memory-intensive than DFS for deep graphs but optimal for shortest-path problems.

Applications: Finding shortest paths in unweighted graphs, web crawling, social networking (degrees of separation), broadcasting in networks, and GPS navigation in uniform cost scenarios.

Dijkstra's Algorithm

Strategy: Dijkstra's algorithm finds the shortest path in weighted graphs where edge weights are non-negative. It maintains a priority queue of vertices ordered by their tentative distance from the start.

Algorithm:

1. Initialize distance to start as 0, all others as ∞

2. Add all vertices to a priority queue (min-heap)

3. While queue is not empty:

   a. Extract vertex u with minimum distance

   b. For each neighbor v of u:

      - Calculate: alt = dist[u] + weight(u, v)

      - If alt < dist[v]: update dist[v] = alt

Mathematical Formulation:

dist[v] = min(dist[v], dist[u] + w(u,v))

where w(u,v) is the weight of edge from u to v

Complexity:

  • Time: O((V + E) log V) with binary heap, O(V²) with array
  • Space: O(V)

Characteristics: Dijkstra's algorithm guarantees finding the shortest path in weighted graphs with non-negative edge weights. It's a greedy algorithm that always expands the most promising vertex (lowest distance so far).

Applications: GPS and map routing, network routing protocols (OSPF), robot path planning, airline flight routing, and any scenario requiring optimal paths with varying costs.

Limitation: Cannot handle negative edge weights. For graphs with negative weights (but no negative cycles), use the Bellman-Ford algorithm instead.

A* (A-Star) Algorithm

Strategy: A* is an informed search algorithm that uses a heuristic function to guide its search toward the goal more efficiently than Dijkstra's. It combines the actual cost from the start with an estimated cost to the goal.

Core Formula:

f(n) = g(n) + h(n)

where:

• g(n) = actual cost from start to node n

• h(n) = heuristic estimate of cost from n to goal

• f(n) = estimated total cost of path through n

Common Heuristics:

  • Manhattan Distance: |x₁ - x₂| + |y₁ - y₂| (for grid with 4-directional movement)
  • Euclidean Distance: √[(x₁ - x₂)² + (y₁ - y₂)²] (straight-line distance)
  • Chebyshev Distance: max(|x₁ - x₂|, |y₁ - y₂|) (for grid with 8-directional movement)

Algorithm:

1. Initialize open set with start node (f = h(start))

2. While open set is not empty:

   a. Select node n with lowest f(n)

   b. If n is goal, reconstruct and return path

   c. Move n to closed set

   d. For each neighbor m of n:

      - If m in closed set, skip

      - Calculate tentative g(m) = g(n) + cost(n,m)

      - If m not in open set or tentative g(m) < g(m):

        Update g(m), f(m) = g(m) + h(m), add to open set

Complexity:

  • Time: O(b^d) in worst case, but typically much better with good heuristic
  • Space: O(b^d) where b is branching factor, d is solution depth

Optimality Guarantee: A* is guaranteed to find the optimal path if the heuristic is admissible (never overestimates the actual cost) and consistent (satisfies the triangle inequality: h(n) ≤ cost(n,m) + h(m)).

Characteristics: A* combines the best of Dijkstra's (optimality) and greedy best-first search (speed). The quality of the heuristic directly impacts performance—better heuristics lead to fewer explored nodes.

Applications: Video game pathfinding, robotics, puzzle solving (15-puzzle, Rubik's cube), route planning with landmarks, and any scenario where you can estimate distance to goal.

Algorithm Comparison

Algorithm Completeness Optimality Time Complexity Space Complexity
DFS Yes* No O(V + E) O(V)
BFS Yes Yes** O(V + E) O(V)
Dijkstra Yes Yes O((V+E) log V) O(V)
A* Yes Yes*** O(b^d) O(b^d)

Notes:
* DFS is complete in finite graphs
** BFS finds optimal solution in unweighted graphs
*** A* finds optimal solution with admissible heuristic

When to Use Each Algorithm

Use DFS when:

  • You want a memory-efficient solution
  • Finding any solution is sufficient (not necessarily shortest)
  • Exploring deep branches first makes sense for your problem
  • Detecting cycles or connectivity is the goal

Use BFS when:

  • You need the shortest path in an unweighted graph
  • Finding the closest solution is important
  • Level-by-level exploration makes sense
  • Broadcasting or propagation problems

Use Dijkstra when:

  • You have a weighted graph with non-negative weights
  • You need the optimal path considering edge costs
  • No heuristic information is available
  • Finding shortest paths from one source to all vertices

Use A* when:

  • You have weighted edges and a good heuristic function
  • Performance is critical and you can estimate goal distance
  • Finding the optimal path efficiently is required
  • Working with spatial problems (grids, maps)

Real-World Applications

Graph algorithms power many technologies we use daily:

  • GPS Navigation: A* and Dijkstra's algorithms find optimal routes considering distance, time, traffic, and road types. Modern systems use contraction hierarchies and other optimizations for faster computation.
  • Social Networks: BFS finds connections and degrees of separation. DFS helps detect communities and influencers.
  • Game AI: A* powers enemy pathfinding in video games, making NPCs navigate complex environments realistically.
  • Network Routing: Internet routers use variants of Dijkstra's algorithm (like OSPF) to find optimal packet routes.
  • Recommendation Systems: Graph algorithms analyze user-item relationships to suggest products, movies, or connections.
  • Robotics: Path planning algorithms help robots navigate physical spaces while avoiding obstacles.
  • Puzzle Solvers: A* and BFS solve puzzles like sliding tiles, Sudoku, and maze problems.