Ejemplo n.º 1
0
        static void Main(string[] args)
        {
            int    N, M, a, b;
            string c;

            string[] c2 = new string[2];
            Console.Write("N = ");
            N = Convert.ToInt32(Console.ReadLine());
            Console.Write("M = ");
            M = Convert.ToInt32(Console.ReadLine());

            Graf g = new Graf(N + 1);

            for (int i = 0; i < M; i++)
            {
                Console.Write((i + 1) + "-a linia: ");
                c  = Console.ReadLine();
                c2 = c.Split(' ');
                a  = Convert.ToInt32(c2[0]);
                b  = Convert.ToInt32(c2[1]);
                if (a > N || b > N)
                {
                    Console.WriteLine("Neisnuye stantsiy dlya linii #" + a + " - #" + b);
                    break;
                }
                g.addRebro(a, b);
            }

            g.DFS(1);


            Console.ReadKey();
        }
Ejemplo n.º 2
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);
        }
Ejemplo n.º 3
0
        public void TopologicalTest1()
        {
            var graf = new Graf<char>();

            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');

            qVertex.AddDirectedEdge(1, sVertex);
            qVertex.AddDirectedEdge(1, tVertex);
            qVertex.AddDirectedEdge(1, wVertex);

            sVertex.AddDirectedEdge(1, vVertex);

            vVertex.AddDirectedEdge(1, wVertex);

            wVertex.AddDirectedEdge(1, sVertex);

            tVertex.AddDirectedEdge(1, xVertex);
            tVertex.AddDirectedEdge(1, yVertex);

            xVertex.AddDirectedEdge(1, zVertex);

            yVertex.AddDirectedEdge(1, qVertex);

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

            uVertex.AddDirectedEdge(1, yVertex);

            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();

            Assert.Null(graf.GetTopologicalSort());
        }
Ejemplo n.º 4
0
        public void DFSTest1()
        {
            var graf = new Graf<char>();

            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');

            qVertex.AddDirectedEdge(1, sVertex);
            qVertex.AddDirectedEdge(1, tVertex);
            qVertex.AddDirectedEdge(1, wVertex);

            sVertex.AddDirectedEdge(1, vVertex);

            vVertex.AddDirectedEdge(1, wVertex);

            wVertex.AddDirectedEdge(1, sVertex);

            tVertex.AddDirectedEdge(1, xVertex);
            tVertex.AddDirectedEdge(1, yVertex);

            xVertex.AddDirectedEdge(1, zVertex);

            yVertex.AddDirectedEdge(1, qVertex);

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

            uVertex.AddDirectedEdge(1, yVertex);

            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();

            Assert.Equal(1, qVertex.DiscoveryTime);
            Assert.Equal(16, qVertex.FinishingTime);

            Assert.Equal(17, rVertex.DiscoveryTime);
            Assert.Equal(20, rVertex.FinishingTime);

            Assert.Equal(2, sVertex.DiscoveryTime);
            Assert.Equal(7, sVertex.FinishingTime);

            Assert.Equal(8, tVertex.DiscoveryTime);
            Assert.Equal(15, tVertex.FinishingTime);

            Assert.Equal(18, uVertex.DiscoveryTime);
            Assert.Equal(19, uVertex.FinishingTime);

            Assert.Equal(3, vVertex.DiscoveryTime);
            Assert.Equal(6, vVertex.FinishingTime);

            Assert.Equal(4, wVertex.DiscoveryTime);
            Assert.Equal(5, wVertex.FinishingTime);

            Assert.Equal(9, xVertex.DiscoveryTime);
            Assert.Equal(12, xVertex.FinishingTime);

            Assert.Equal(13, yVertex.DiscoveryTime);
            Assert.Equal(14, yVertex.FinishingTime);

            Assert.Equal(10, zVertex.DiscoveryTime);
            Assert.Equal(11, zVertex.FinishingTime);
        }