Пример #1
0
        public ICollection <TEdge> MergedPath(TEdge se, IDictionary <TEdge, GraphColor> colors)
        {
            List <TEdge> path = new List <TEdge>();

            TEdge      ec = se;
            GraphColor c  = colors[ec];

            if (c != GraphColor.White)
            {
                return(path);
            }
            else
            {
                colors[ec] = GraphColor.Black;
            }

            path.Insert(0, ec);
            while (EdgePredecessors.ContainsKey(ec))
            {
                TEdge e = EdgePredecessors[ec];
                c = colors[e];
                if (c != GraphColor.White)
                {
                    return(path);
                }
                else
                {
                    colors[e] = GraphColor.Black;
                }

                path.Insert(0, e);
                ec = e;
            }
            return(path);
        }
Пример #2
0
 /// <summary>
 /// Records end path edges
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="args"></param>
 public void FinishEdge(Object sender, EdgeEventArgs args)
 {
     if (!EdgePredecessors.ContainsValue(args.Edge))
     {
         EndPathEdges.Add(args.Edge);
     }
 }
Пример #3
0
        /// <summary>
        /// Create a merged path.
        /// </summary>
        /// <remarks>
        /// <para>
        /// This method creates an edge path that stops if an edge is not white
        /// or the edge has no more predecessors.
        /// </para>
        /// </remarks>
        /// <param name="se">end edge</param>
        /// <param name="colors">edge color dictionary</param>
        /// <returns>path to edge</returns>
        public EdgeCollection MergedPath(IEdge se, EdgeColorDictionary colors)
        {
            EdgeCollection path = new EdgeCollection();

            IEdge      ec = se;
            GraphColor c  = colors[ec];

            if (c != GraphColor.White)
            {
                return(path);
            }
            else
            {
                colors[ec] = GraphColor.Black;
            }

            path.Insert(0, ec);
            while (EdgePredecessors.Contains(ec))
            {
                IEdge e = EdgePredecessors[ec];
                c = colors[e];
                if (c != GraphColor.White)
                {
                    return(path);
                }
                else
                {
                    colors[e] = GraphColor.Black;
                }

                path.Insert(0, e);
                ec = e;
            }
            return(path);
        }
Пример #4
0
        public ICollection <TEdge> Path(TEdge se)
        {
            List <TEdge> path = new List <TEdge>();

            TEdge ec = se;

            path.Insert(0, ec);
            while (EdgePredecessors.ContainsKey(ec))
            {
                TEdge e = EdgePredecessors[ec];
                path.Insert(0, e);
                ec = e;
            }
            return(path);
        }
Пример #5
0
        /// <summary>
        /// Returns the path leading to the vertex v.
        /// </summary>
        /// <param name="se">end of the path</param>
        /// <returns>path leading to v</returns>
        public EdgeCollection Path(IEdge se)
        {
            EdgeCollection path = new EdgeCollection();

            IEdge ec = se;

            path.Insert(0, ec);
            while (EdgePredecessors.Contains(ec))
            {
                IEdge e = EdgePredecessors[ec];
                path.Insert(0, e);
                ec = e;
            }
            return(path);
        }
Пример #6
0
        public ICollection <TEdge> Path(TEdge se)
        {
            List <TEdge> path = new List <TEdge>();

            TEdge ec = se;

            path.Insert(0, ec);
            TEdge e;

            while (EdgePredecessors.TryGetValue(ec, out e))
            {
                path.Insert(0, e);
                ec = e;
            }
            return(path);
        }