/// <summary>
 /// Initializes a new instance of the <see cref="SourceFirstBidirectionalTopologicalSortAlgorithm{TVertex,TEdge}"/> class.
 /// </summary>
 /// <param name="visitedGraph">Graph to visit.</param>
 /// <param name="direction">Sort direction.</param>
 public SourceFirstBidirectionalTopologicalSortAlgorithm(
     [NotNull] IBidirectionalGraph <TVertex, TEdge> visitedGraph,
     TopologicalSortDirection direction)
     : base(visitedGraph)
 {
     _direction = direction;
     _heap      = new BinaryQueue <TVertex, int>(vertex => InDegrees[vertex]);
 }
 public SourceFirstBidirectionalTopologicalSortAlgorithm(
     IBidirectionalGraph <TVertex, TEdge> visitedGraph,
     TopologicalSortDirection direction
     )
     : base(visitedGraph)
 {
     this.direction = direction;
     this.heap      = new BinaryQueue <TVertex, int>(e => this.predCounts[e]);
 }
Ejemplo n.º 3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SourceFirstBidirectionalTopologicalSortAlgorithm{TVertex,TEdge}"/> class.
 /// </summary>
 /// <param name="visitedGraph">Graph to visit.</param>
 /// <param name="direction">Sort direction.</param>
 /// <param name="capacity">Sorted vertices capacity.</param>
 public SourceFirstBidirectionalTopologicalSortAlgorithm(
     [NotNull] IBidirectionalGraph <TVertex, TEdge> visitedGraph,
     TopologicalSortDirection direction,
     int capacity = -1)
     : base(visitedGraph)
 {
     _direction      = direction;
     _heap           = new BinaryQueue <TVertex, int>(vertex => InDegrees[vertex]);
     _sortedVertices = capacity > 0 ? new List <TVertex>(capacity) : new List <TVertex>();
 }
Ejemplo n.º 4
0
        private static void RunSourceFirstTopologicalSortAndCheck <TVertex, TEdge>(
            [NotNull] IBidirectionalGraph <TVertex, TEdge> graph,
            TopologicalSortDirection direction)
            where TEdge : IEdge <TVertex>
        {
            var algorithm = new SourceFirstBidirectionalTopologicalSortAlgorithm <TVertex, TEdge>(graph, direction);

            algorithm.Compute();

            Assert.IsNotNull(algorithm.SortedVertices);
            Assert.AreEqual(graph.VertexCount, algorithm.SortedVertices.Length);
            Assert.IsNotNull(algorithm.InDegrees);
            Assert.AreEqual(graph.VertexCount, algorithm.InDegrees.Count);
        }
Ejemplo n.º 5
0
        public static IEnumerable <TVertex> SourceFirstBidirectionalTopologicalSort <TVertex, TEdge>(
#if !NET20
            this
#endif
            IBidirectionalGraph <TVertex, TEdge> visitedGraph,
            TopologicalSortDirection direction)
            where TEdge : IEdge <TVertex>
        {
            Contract.Requires(visitedGraph != null);

            var vertices = new List <TVertex>(visitedGraph.VertexCount);

            SourceFirstBidirectionalTopologicalSort(visitedGraph, vertices, direction);
            return(vertices);
        }
Ejemplo n.º 6
0
        public static void SourceFirstBidirectionalTopologicalSort <TVertex, TEdge>(
#if !NET20
            this
#endif
            IBidirectionalGraph <TVertex, TEdge> visitedGraph,
            IList <TVertex> vertices,
            TopologicalSortDirection direction)
            where TEdge : IEdge <TVertex>
        {
            Contract.Requires(visitedGraph != null);
            Contract.Requires(vertices != null);

            var topo = new SourceFirstBidirectionalTopologicalSortAlgorithm <TVertex, TEdge>(visitedGraph, direction);

            topo.Compute(vertices);
        }
Ejemplo n.º 7
0
        private static void Sort <TVertex, TEdge>([NotNull] IBidirectionalGraph <TVertex, TEdge> graph, TopologicalSortDirection direction)
            where TEdge : IEdge <TVertex>
        {
            var algorithm = new SourceFirstBidirectionalTopologicalSortAlgorithm <TVertex, TEdge>(graph, direction);

            try
            {
                algorithm.Compute();
            }
            catch (NonAcyclicGraphException)
            {
            }
        }
Ejemplo n.º 8
0
        public void Sort <TVertex, TEdge>([PexAssumeNotNull] IBidirectionalGraph <TVertex, TEdge> g, TopologicalSortDirection direction)
            where TEdge : IEdge <TVertex>
        {
            var topo = new SourceFirstBidirectionalTopologicalSortAlgorithm <TVertex, TEdge>(g, direction);

            try
            {
                topo.Compute();
            }
            catch (NonAcyclicGraphException)
            { }
        }