/// <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;
		}
		/// <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;
		}
        /// <summary>
        /// Returns the path leading to the vertex v.
        /// </summary>
        /// <param name="v">end of the path</param>
        /// <returns>path leading to v</returns>
        public EdgeCollection Path(IVertex v)
        {
            EdgeCollection path = new EdgeCollection();

            IVertex vc = v;
            while (Predecessors.Contains(v))
            {
                IEdge e = Predecessors[v];
                path.Insert(0,e);
                v=e.Source;
            }

            return path;
        }
 public EdgeCollection Path(IVertex v)
 {
     EdgeCollection edges = new EdgeCollection();
     IVertex vertex = v;
     while (this.Predecessors.Contains(v))
     {
         IEdge edge = this.Predecessors.get_Item(v);
         edges.Insert(0, edge);
         v = edge.get_Source();
     }
     return edges;
 }
 public EdgeCollection Path(IEdge se)
 {
     EdgeCollection edges = new EdgeCollection();
     IEdge edge = se;
     edges.Insert(0, edge);
     while (this.EdgePredecessors.Contains(edge))
     {
         IEdge edge2 = this.EdgePredecessors.get_Item(edge);
         edges.Insert(0, edge2);
         edge = edge2;
     }
     return edges;
 }
 public EdgeCollection MergedPath(IEdge se, EdgeColorDictionary colors)
 {
     EdgeCollection edges = new EdgeCollection();
     IEdge edge = se;
     if (colors.get_Item(edge) == null)
     {
         colors.set_Item(edge, 1);
         edges.Insert(0, edge);
         while (this.EdgePredecessors.Contains(edge))
         {
             IEdge edge2 = this.EdgePredecessors.get_Item(edge);
             if (colors.get_Item(edge2) != null)
             {
                 return edges;
             }
             colors.set_Item(edge2, 1);
             edges.Insert(0, edge2);
             edge = edge2;
         }
     }
     return edges;
 }