Beispiel #1
0
 public MultiSourceSinkGraphAugmentorAlgorithm(IMutableBidirectionalGraph <TVertex, TEdge> visitedGraph)
     : this(visitedGraph,
            FactoryCompiler.GetVertexFactory <TVertex>(),
            FactoryCompiler.GetEdgeFactory <TVertex, TEdge>()
            )
 {
 }
Beispiel #2
0
        public void GraphWithSelfEdges(
            [UsingLinear(2, 9)] int i,
            [UsingLinear(0, 10)] int j
            )
        {
            if (i == 0 && j == 0)
            {
                return;
            }

            Random rnd = new Random();

            g = new AdjacencyGraph <int, Edge <int> >(true);
            RandomGraphFactory.Create <int, Edge <int> >(g,
                                                         new IntVertexFactory(),
                                                         FactoryCompiler.GetEdgeFactory <int, Edge <int> >(),
                                                         rnd, i, j, true);

            algo = new BreadthFirstSearchAlgorithm <int, Edge <int> >(g);
            try
            {
                algo.InitializeVertex += new VertexEventHandler <int>(this.InitializeVertex);
                algo.DiscoverVertex   += new VertexEventHandler <int>(this.DiscoverVertex);
                algo.ExamineEdge      += new EdgeEventHandler <int, Edge <int> >(this.ExamineEdge);
                algo.ExamineVertex    += new VertexEventHandler <int>(this.ExamineVertex);
                algo.TreeEdge         += new EdgeEventHandler <int, Edge <int> >(this.TreeEdge);
                algo.NonTreeEdge      += new EdgeEventHandler <int, Edge <int> >(this.NonTreeEdge);
                algo.GrayTarget       += new EdgeEventHandler <int, Edge <int> >(this.GrayTarget);
                algo.BlackTarget      += new EdgeEventHandler <int, Edge <int> >(this.BlackTarget);
                algo.FinishVertex     += new VertexEventHandler <int>(this.FinishVertex);

                parents.Clear();
                distances.Clear();
                currentDistance = 0;
                sourceVertex    = RandomGraphFactory.GetVertex(g, rnd);

                foreach (int v in g.Vertices)
                {
                    distances[v] = int.MaxValue;
                    parents[v]   = v;
                }
                distances[sourceVertex] = 0;
                algo.Compute(sourceVertex);

                CheckBfs();
            }
            finally
            {
                algo.InitializeVertex -= new VertexEventHandler <int>(this.InitializeVertex);
                algo.DiscoverVertex   -= new VertexEventHandler <int>(this.DiscoverVertex);
                algo.ExamineEdge      -= new EdgeEventHandler <int, Edge <int> >(this.ExamineEdge);
                algo.ExamineVertex    -= new VertexEventHandler <int>(this.ExamineVertex);
                algo.TreeEdge         -= new EdgeEventHandler <int, Edge <int> >(this.TreeEdge);
                algo.NonTreeEdge      -= new EdgeEventHandler <int, Edge <int> >(this.NonTreeEdge);
                algo.GrayTarget       -= new EdgeEventHandler <int, Edge <int> >(this.GrayTarget);
                algo.BlackTarget      -= new EdgeEventHandler <int, Edge <int> >(this.BlackTarget);
                algo.FinishVertex     -= new VertexEventHandler <int>(this.FinishVertex);
            }
        }
Beispiel #3
0
 public AllVerticesGraphAugmentorAlgorithm(
     IMutableVertexAndEdgeListGraph <TVertex, TEdge> visitedGraph
     )
     : this(visitedGraph,
            FactoryCompiler.GetVertexFactory <TVertex>(),
            FactoryCompiler.GetEdgeFactory <TVertex, TEdge>()
            )
 {
 }
Beispiel #4
0
 public MaximumBipartiteMatchingAlgorithm(
     IMutableVertexAndEdgeListGraph <TVertex, TEdge> visitedGraph
     )
     : this(visitedGraph,
            FactoryCompiler.GetVertexFactory <TVertex>(),
            FactoryCompiler.GetEdgeFactory <TVertex, TEdge>()
            )
 {
 }
Beispiel #5
0
 public GraphBalancerAlgorithm(
     IMutableBidirectionalGraph <TVertex, TEdge> visitedGraph,
     TVertex source,
     TVertex sink
     )
     : this(visitedGraph,
            source,
            sink,
            FactoryCompiler.GetVertexFactory <TVertex>(),
            FactoryCompiler.GetEdgeFactory <TVertex, TEdge>()
            )
 {
 }
Beispiel #6
0
 public static void Create <TVertex, TEdge>(
     IMutableVertexAndEdgeListGraph <TVertex, TEdge> g,
     Random rnd,
     int vertexCount,
     int edgeCount,
     bool selfEdges
     ) where TEdge : IEdge <TVertex>
 {
     Create <TVertex, TEdge>(
         g,
         FactoryCompiler.GetVertexFactory <TVertex>(),
         FactoryCompiler.GetEdgeFactory <TVertex, TEdge>(),
         rnd,
         vertexCount,
         edgeCount,
         selfEdges
         );
 }