public void GraphWithoutSelfEdges() { AdjacencyGraph g = new AdjacencyGraph( new QuickGraph.Providers.VertexAndEdgeProvider(), true); RandomGraph.Graph(g, 20, 100, new Random(), false); DepthFirstSearchAlgorithm dfs = new DepthFirstSearchAlgorithm(g); dfs.StartVertex += new VertexHandler(this.StartVertex); dfs.DiscoverVertex += new VertexHandler(this.DiscoverVertex); dfs.ExamineEdge += new EdgeHandler(this.ExamineEdge); dfs.TreeEdge += new EdgeHandler(this.TreeEdge); dfs.BackEdge += new EdgeHandler(this.BackEdge); dfs.ForwardOrCrossEdge += new EdgeHandler(this.FowardOrCrossEdge); dfs.FinishVertex += new VertexHandler(this.FinishVertex); Parents.Clear(); DiscoverTimes.Clear(); FinishTimes.Clear(); m_Time = 0; foreach (IVertex v in g.Vertices) { Parents[v] = v; } // compute dfs.Compute(); CheckDfs(g, dfs); }
/// <inheritdoc /> protected override void Initialize() { base.Initialize(); ComponentsPerStep = new List <int>(); VerticesPerStep = new List <TVertex>(); Components.Clear(); Roots.Clear(); DiscoverTimes.Clear(); _stack.Clear(); ComponentCount = 0; _dfsTime = 0; }
public void GraphWithSelfEdgesPUT(AdjacencyGraph g, int loopBound, bool self) { Random rnd; //new Random(); var choose1 = PexChoose.FromCall(this); rnd = choose1.ChooseValue <Random>("Random object"); Init(); for (int i = 0; i < loopBound; ++i) { for (int j = 0; j < i * i; ++j) { RandomGraph.Graph(g, i, j, rnd, true); Init(); DepthFirstSearchAlgorithm dfs = new DepthFirstSearchAlgorithm(g); dfs.StartVertex += new VertexHandler(this.StartVertex); dfs.DiscoverVertex += new VertexHandler(this.DiscoverVertex); dfs.ExamineEdge += new EdgeHandler(this.ExamineEdge); dfs.TreeEdge += new EdgeHandler(this.TreeEdge); dfs.BackEdge += new EdgeHandler(this.BackEdge); dfs.ForwardOrCrossEdge += new EdgeHandler(this.FowardOrCrossEdge); dfs.FinishVertex += new VertexHandler(this.FinishVertex); Parents.Clear(); DiscoverTimes.Clear(); FinishTimes.Clear(); m_Time = 0; foreach (IVertex v in g.Vertices) { Parents[v] = v; } var choose = PexChoose.FromCall(this); if (choose.ChooseValue <bool>("to add a self ede")) { IVertex selfEdge = RandomGraph.Vertex(g, rnd); g.AddEdge(selfEdge, selfEdge); } // compute dfs.Compute(); CheckDfs(g, dfs); } } }
/// <inheritdoc /> protected override void InternalCompute() { Debug.Assert(ComponentCount >= 0); Debug.Assert(VisitedGraph.VertexCount >= 0 || ComponentCount == 0); //Debug.Assert(VisitedGraph.Vertices.All(v => Components.ContainsKey(v))); //Debug.Assert(VisitedGraph.VertexCount == Components.Count); //Debug.Assert(Components.Values.All(c => c <= ComponentCount)); ComponentsPerStep = new List <int>(); VerticesPerStep = new List <TVertex>(); Components.Clear(); Roots.Clear(); DiscoverTimes.Clear(); _stack.Clear(); ComponentCount = 0; _dfsTime = 0; DepthFirstSearchAlgorithm <TVertex, TEdge> dfs = null; try { dfs = new DepthFirstSearchAlgorithm <TVertex, TEdge>( this, VisitedGraph, new Dictionary <TVertex, GraphColor>(VisitedGraph.VertexCount)); dfs.DiscoverVertex += OnVertexDiscovered; dfs.FinishVertex += OnVertexFinished; dfs.Compute(); } finally { if (dfs != null) { dfs.DiscoverVertex -= OnVertexDiscovered; dfs.FinishVertex -= OnVertexFinished; } } }