Ejemplo n.º 1
0
        /// <summary>
        /// Performs a depth-first search on the graph and retrieves a post-order sorting.
        /// </summary>
        /// <param name="succrel">successor relation</param>
        /// <param name="indexMap">index map for receiving the post order indices</param>
        /// <param name="nodes">nodes to consider</param>
        /// <param name="start">start node</param>
        /// <param name="reverse">whether a reverse post-order sorting is desired</param>
        /// <returns>all visited nodes in post-order sorting or inverse post-order sorting</returns>
        public static T[] GetPostOrder <T>(IPropMap <T, T[]> succrel,
                                           IPropMap <T, int> indexMap,
                                           IList <T> nodes, T start, bool reverse)
        {
            indexMap.Reset(nodes, -1);
            Stack <T> result = new Stack <T>();
            int       index  = 0;

            PostOrderDFS(succrel, indexMap, result, start, ref index);
            indexMap.Reset(nodes, -1);
            List <T> order = new List <T>(nodes.Count);

            index = 0;
            foreach (T node in result)
            {
                if (indexMap[node] < 0)
                {
                    order.Add(node);
                    indexMap[node] = index++;
                }
            }
            if (reverse)
            {
                order.Reverse();
            }
            return(order.ToArray());
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Sets all specified keys of the property map to <c>default(TValue)</c>.
 /// </summary>
 /// <param name="pmap">the property map</param>
 /// <param name="nodes">the elements whose property values are to be reset</param>
 public static void Clear <TThis, TValue>(this IPropMap <TThis, TValue> pmap,
                                          IEnumerable <TThis> nodes)
 {
     pmap.Reset(nodes, default(TValue));
 }