private void  createEdgeList(ClosestFirstIterator iter, System.Object endVertex)
        {
            m_edgeList = new System.Collections.ArrayList();

            while (true)
            {
                Edge edge = iter.getSpanningTreeEdge(endVertex);

                if (edge == null)
                {
                    break;
                }

                m_edgeList.Add(edge);
                endVertex = edge.oppositeVertex(endVertex);
            }

            ((ArrayList)m_edgeList).Reverse();
        }
        /// <summary> Creates and executes a new DijkstraShortestPath algorithm instance. An
        /// instance is only good for a single search; after construction, it can
        /// be accessed to retrieve information about the path found.
        ///
        /// </summary>
        /// <param name="graph">the graph to be searched
        /// </param>
        /// <param name="startVertex">the vertex at which the path should start
        /// </param>
        /// <param name="endVertex">the vertex at which the path should end
        /// </param>
        /// <param name="radius">limit on path length, or Double.POSITIVE_INFINITY for
        /// unbounded search
        /// </param>
        public DijkstraShortestPath(Graph graph, System.Object startVertex, System.Object endVertex, double radius)
        {
            ClosestFirstIterator iter = new ClosestFirstIterator(graph, startVertex, radius);

            //UPGRADE_TODO: Method 'java.util.Iterator.hasNext' was converted to 'System.Collections.IEnumerator.MoveNext' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilIteratorhasNext'"
            while (iter.MoveNext())
            {
                //UPGRADE_TODO: Method 'java.util.Iterator.next' was converted to 'System.Collections.IEnumerator.Current' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilIteratornext'"
                System.Object vertex = iter.Current;

                if (vertex.Equals(endVertex))
                {
                    createEdgeList(iter, endVertex);
                    m_pathLength = iter.getShortestPathLength(endVertex);

                    return;
                }
            }

            m_edgeList   = null;
            m_pathLength = System.Double.PositiveInfinity;
        }