Given a map broken up into a sequential list of squares (actually just bools, true meaning the square was usable) and the indices of the start and end points, it generates a series of indices representing the shortest path through the list by spreading out from the start and end squares and recursively spreading to each adjacent usable square. The blocks would be automatically "trimmed" whenever a dead-end was found. When the spreading blocks overlapped, it would have the path.
It turned out to be really slow, though. And thinking back, I don't think it would necessarily find the shortest path, just a path.