private IEnumerable <IPath <V, E> > EnumeratePaths(ShortestPathEnumerator enumerator)
 {
     while (enumerator.MoveNext())
     {
         yield return(enumerator.Current);
     }
 }
        /// <summary>
        /// Searches the given graph for paths between the given vertices.
        /// </summary>
        /// <param name="graph"></param>
        /// <param name="src"></param>
        /// <param name="dst"></param>
        /// <param name="weigher"></param>
        /// <returns></returns>
        public IEnumerable <IPath <V, E> > LazyPathSearch(IGraph <V, E> graph, V src, V dst, IEdgeWeigher <V, E> weigher)
        {
            var enumerator = new ShortestPathEnumerator(graph, src, dst, weigher);
            var paths      = new SortedSet <IPath <V, E> >(EnumeratePaths(enumerator), new PathComparer());

            foreach (IPath <V, E> path in paths)
            {
                yield return(path);
            }
        }