public override DistanceObject <TValue, TVertex> GetPath(TVertex baseVertex)
        {
            DistanceObject <TValue, TVertex> result = new DistanceObject <TValue, TVertex>(Graph, baseVertex);
            VertexPriorityQueue queue = new VertexPriorityQueue();

            queue.Insert(0, baseVertex);
            Color colorId = Color.CreateColor();

            while (!queue.IsEmpty)
            {
                TVertex vertex = queue.DeleteMinimumValue();
                if (vertex.Color == colorId)
                {
                    continue;
                }
                vertex.Color = colorId;
                foreach (TVertex adjVertex in Graph.GetAdjacentVertextList(vertex))
                {
                    double weight = result[vertex].Distance + Graph.GetWeight(vertex, adjVertex);
                    if (result.IsRowEmpty(adjVertex) || weight < result[adjVertex].Distance)
                    {
                        result[adjVertex] = new DistanceObject <TValue, TVertex> .Row(adjVertex, vertex, weight);

                        queue.Insert(weight, adjVertex);
                    }
                }
            }
            return(result);
        }
        public override DistanceObject <TValue, TVertex> GetPath(TVertex baseVertex)
        {
            DistanceObject <TValue, TVertex> result = new DistanceObject <TValue, TVertex>(Graph, baseVertex);
            Queue <TVertex> queue = new Queue <TVertex>();

            queue.EnQueue(baseVertex);
            Color colorId = Color.CreateColor();

            while (!queue.IsEmpty)
            {
                TVertex vertex = queue.DeQueue();
                vertex.Color = Color.Empty;
                foreach (TVertex adjVertex in Graph.GetAdjacentVertextList(vertex))
                {
                    double weight = result[vertex].Distance + Graph.GetWeight(vertex, adjVertex);
                    if (result.IsRowEmpty(adjVertex) || weight < result[adjVertex].Distance)
                    {
                        result[adjVertex] = new DistanceObject <TValue, TVertex> .Row(adjVertex, vertex, weight);

                        if (adjVertex.Color != colorId)
                        {
                            queue.EnQueue(adjVertex);
                        }
                        adjVertex.Color = colorId;
                    }
                }
            }
            return(result);
        }
        public override DistanceObject <TValue, TVertex> GetPath(TVertex baseVertex)
        {
            DistanceObject <TValue, TVertex> result = new DistanceObject <TValue, TVertex>(Graph, baseVertex);
            Queue <TVertex> queue = new Queue <TVertex>();

            queue.EnQueue(baseVertex);
            while (!queue.IsEmpty)
            {
                TVertex vertex = queue.DeQueue();
                foreach (TVertex adjVertex in Graph.GetAdjacentVertextList(vertex))
                {
                    if (result.IsRowEmpty(adjVertex))
                    {
                        result[adjVertex] = new DistanceObject <TValue, TVertex> .Row(adjVertex, vertex, result[vertex].Distance + 1);

                        queue.EnQueue(adjVertex);
                    }
                }
            }
            return(result);
        }