Esempio n. 1
0
        public void TopologicalTest3()
        {
            var graf = new Graf<char>();

            var mVertex = new Vertex<char>('m');
            var nVertex = new Vertex<char>('n');
            var oVertex = new Vertex<char>('o');
            var pVertex = new Vertex<char>('p');

            var qVertex = new Vertex<char>('q');
            var rVertex = new Vertex<char>('r');
            var sVertex = new Vertex<char>('s');

            var tVertex = new Vertex<char>('t');
            var uVertex = new Vertex<char>('u');
            var vVertex = new Vertex<char>('v');
            var wVertex = new Vertex<char>('w');

            var xVertex = new Vertex<char>('x');
            var yVertex = new Vertex<char>('y');
            var zVertex = new Vertex<char>('z');

            mVertex.AddDirectedEdge(1, qVertex);
            mVertex.AddDirectedEdge(1, rVertex);
            mVertex.AddDirectedEdge(1, xVertex);

            nVertex.AddDirectedEdge(1, qVertex);
            nVertex.AddDirectedEdge(1, uVertex);
            nVertex.AddDirectedEdge(1, oVertex);

            oVertex.AddDirectedEdge(1, rVertex);
            oVertex.AddDirectedEdge(1, sVertex);

            pVertex.AddDirectedEdge(1, oVertex);
            pVertex.AddDirectedEdge(1, sVertex);
            pVertex.AddDirectedEdge(1, zVertex);

            qVertex.AddDirectedEdge(1, tVertex);

            rVertex.AddDirectedEdge(1, uVertex);
            rVertex.AddDirectedEdge(1, yVertex);

            sVertex.AddDirectedEdge(1, rVertex);

            uVertex.AddDirectedEdge(1, tVertex);

            vVertex.AddDirectedEdge(1, wVertex);
            vVertex.AddDirectedEdge(1, xVertex);

            wVertex.AddDirectedEdge(1, zVertex);

            yVertex.AddDirectedEdge(1, vVertex);

            graf.AddVertex(mVertex);
            graf.AddVertex(nVertex);
            graf.AddVertex(oVertex);
            graf.AddVertex(pVertex);
            graf.AddVertex(qVertex);
            graf.AddVertex(rVertex);
            graf.AddVertex(sVertex);
            graf.AddVertex(tVertex);
            graf.AddVertex(uVertex);
            graf.AddVertex(vVertex);
            graf.AddVertex(wVertex);
            graf.AddVertex(xVertex);
            graf.AddVertex(yVertex);
            graf.AddVertex(zVertex);

            graf.DFS();

            var topologicalSort = graf.GetTopologicalSort().ToList();
            Assert.NotNull(topologicalSort);
            Assert.Equal(14, topologicalSort.Count);
            Assert.Equal('p', topologicalSort.First().Key);
            Assert.Equal(27, topologicalSort.First().DiscoveryTime);
            Assert.Equal(28, topologicalSort.First().FinishingTime);

            Assert.Equal('t', topologicalSort.Last().Key);
            Assert.Equal(3, topologicalSort.Last().DiscoveryTime);
            Assert.Equal(4, topologicalSort.Last().FinishingTime);

            var grafT = graf.GetGrafT();
            var components = grafT.GetStronglyConnectedComponents(topologicalSort);
            Assert.Equal(14, components.Count);
        }