A path finding algorithm