Exemplo n.º 1
0
        public void Run()
        {
            const int v = 50;
            const int e = 100;

            Console.WriteLine("complete graph");
            Console.WriteLine(DigraphGenerator.Complete(v));
            Console.WriteLine("---------------------------------------------------------------");

            Console.WriteLine("simple");
            Console.WriteLine(DigraphGenerator.Simple(v, e));
            Console.WriteLine("---------------------------------------------------------------");

            Console.WriteLine("path");
            Console.WriteLine(DigraphGenerator.Path(v));
            Console.WriteLine("---------------------------------------------------------------");

            Console.WriteLine("cycle");
            Console.WriteLine(DigraphGenerator.Cycle(v));
            Console.WriteLine("---------------------------------------------------------------");

            Console.WriteLine("Eulierian path");
            Console.WriteLine(DigraphGenerator.EulerianPath(v, e));
            Console.WriteLine("---------------------------------------------------------------");

            Console.WriteLine("Eulierian cycle");
            Console.WriteLine(DigraphGenerator.EulerianCycle(v, e));
            Console.WriteLine();

            Console.WriteLine("binary tree");
            Console.WriteLine(DigraphGenerator.BinaryTree(v));
            Console.WriteLine("---------------------------------------------------------------");

            Console.WriteLine("tournament");
            Console.WriteLine(DigraphGenerator.Tournament(v));
            Console.WriteLine("---------------------------------------------------------------");

            Console.WriteLine("DAG");
            Console.WriteLine(DigraphGenerator.Dag(v, e));
            Console.WriteLine("---------------------------------------------------------------");

            Console.WriteLine("rooted-in DAG");
            Console.WriteLine(DigraphGenerator.RootedInDag(v, e));
            Console.WriteLine("---------------------------------------------------------------");

            Console.WriteLine("rooted-out DAG");
            Console.WriteLine(DigraphGenerator.RootedOutDag(v, e));
            Console.WriteLine("---------------------------------------------------------------");

            Console.WriteLine("rooted-in tree");
            Console.WriteLine(DigraphGenerator.RootedInTree(v));
            Console.WriteLine("---------------------------------------------------------------");

            Console.WriteLine("rooted-out DAG");
            Console.WriteLine(DigraphGenerator.RootedOutTree(v));
            Console.WriteLine("---------------------------------------------------------------");


            Console.ReadLine();
        }
Exemplo n.º 2
0
        public void Run()
        {
            const int v = 50;
            const int e = 100;


            // Eulerian cycle
            var g1 = DigraphGenerator.EulerianCycle(v, e);

            DirectedEulerianPath.UnitTest(g1, "Eulerian cycle");
            Console.WriteLine("---------------------------------------------------------------");

            // Eulerian path
            var g2 = DigraphGenerator.EulerianPath(v, e);

            DirectedEulerianPath.UnitTest(g2, "Eulerian path");
            Console.WriteLine("---------------------------------------------------------------");

            // add one random edge
            var g3 = new Digraph(g2);

            g3.AddEdge(StdRandom.Uniform(v), StdRandom.Uniform(v));
            DirectedEulerianPath.UnitTest(g3, "one random edge added to Eulerian path");
            Console.WriteLine("---------------------------------------------------------------");

            // self loop
            var g4 = new Digraph(v);
            var v4 = StdRandom.Uniform(v);

            g4.AddEdge(v4, v4);
            DirectedEulerianPath.UnitTest(g4, "single self loop");
            Console.WriteLine("---------------------------------------------------------------");

            // single edge
            var g5 = new Digraph(v);

            g5.AddEdge(StdRandom.Uniform(v), StdRandom.Uniform(v));
            DirectedEulerianPath.UnitTest(g5, "single edge");
            Console.WriteLine("---------------------------------------------------------------");

            // empty digraph
            var g6 = new Digraph(v);

            DirectedEulerianPath.UnitTest(g6, "empty digraph");
            Console.WriteLine("---------------------------------------------------------------");

            // random digraph
            var g7 = DigraphGenerator.Simple(v, e);

            DirectedEulerianPath.UnitTest(g7, "simple digraph");
            Console.WriteLine("---------------------------------------------------------------");


            Console.ReadLine();
        }
Exemplo n.º 3
0
    /**
     * Unit tests the {@code DirectedEulerianCycle} data type.
     *
     * @param args the command-line arguments
     */
    public static void main(String[] args) {
        int V = Integer.parseInt(args[0]);
        int E = Integer.parseInt(args[1]);

        // Eulerian cycle
        Digraph G1 = DigraphGenerator.eulerianCycle(V, E);
        unitTest(G1, "Eulerian cycle");

        // Eulerian path
        Digraph G2 = DigraphGenerator.eulerianPath(V, E);
        unitTest(G2, "Eulerian path");

        // empty digraph
        Digraph G3 = new Digraph(V);
        unitTest(G3, "empty digraph");

        // self loop
        Digraph G4 = new Digraph(V);
        int v4 = StdRandom.uniform(V);
        G4.addEdge(v4, v4);
        unitTest(G4, "single self loop");

        // union of two disjoint cycles
        Digraph H1 = DigraphGenerator.eulerianCycle(V/2, E/2);
        Digraph H2 = DigraphGenerator.eulerianCycle(V - V/2, E - E/2);
        int[] perm = new int[V];
        for (int i = 0; i < V; i++)
            perm[i] = i;
        StdRandom.shuffle(perm);
        Digraph G5 = new Digraph(V);
        for (int v = 0; v < H1.V(); v++)
            for (int w : H1.adj(v))
                G5.addEdge(perm[v], perm[w]);
        for (int v = 0; v < H2.V(); v++)
            for (int w : H2.adj(v))
                G5.addEdge(perm[V/2 + v], perm[V/2 + w]);
        unitTest(G5, "Union of two disjoint cycles");

        // random digraph
        Digraph G6 = DigraphGenerator.simple(V, E);
        unitTest(G6, "simple digraph");

        // 4-vertex digraph
        Digraph G7 = new Digraph(new In("eulerianD.txt"));
        unitTest(G7, "4-vertex Eulerian digraph");
    }
Exemplo n.º 4
0
    /**
     * Unit tests the {@code DirectedEulerianPath} data type.
     *
     * @param args the command-line arguments
     */
    public static void main(String[] args) {
        int V = Integer.parseInt(args[0]);
        int E = Integer.parseInt(args[1]);


        // Eulerian cycle
        Digraph G1 = DigraphGenerator.eulerianCycle(V, E);
        unitTest(G1, "Eulerian cycle");

        // Eulerian path
        Digraph G2 = DigraphGenerator.eulerianPath(V, E);
        unitTest(G2, "Eulerian path");

        // add one random edge
        Digraph G3 = new Digraph(G2);
        G3.addEdge(StdRandom.uniform(V), StdRandom.uniform(V));
        unitTest(G3, "one random edge added to Eulerian path");

        // self loop
        Digraph G4 = new Digraph(V);
        int v4 = StdRandom.uniform(V);
        G4.addEdge(v4, v4);
        unitTest(G4, "single self loop");

        // single edge
        Digraph G5 = new Digraph(V);
        G5.addEdge(StdRandom.uniform(V), StdRandom.uniform(V));
        unitTest(G5, "single edge");

        // empty digraph
        Digraph G6 = new Digraph(V);
        unitTest(G6, "empty digraph");

        // random digraph
        Digraph G7 = DigraphGenerator.simple(V, E);
        unitTest(G7, "simple digraph");

        // 4-vertex digraph
        Digraph G8 = new Digraph(new In("eulerianD.txt"));
        unitTest(G8, "4-vertex Eulerian digraph");
    }
Exemplo n.º 5
0
        public void Run()
        {
            // create random DAG with V vertices and E edges; then add F random edges
            const int v = 50;
            const int e = 100;
            const int f = 0;
            var       g = DigraphGenerator.Dag(v, e);

            // add F extra edges
            for (var i = 0; i < f; i++)
            {
                var ve = StdRandom.Uniform(v);
                var we = StdRandom.Uniform(v);
                g.AddEdge(ve, we);
            }

            Console.WriteLine(g);

            // find a directed cycle
            var topological = new TopologicalX(g);

            if (!topological.HasOrder())
            {
                Console.WriteLine("Not a DAG");
            }

            // or give topologial sort
            else
            {
                Console.Write("Topological order: ");
                foreach (int i in topological.Order())
                {
                    Console.Write($"{i} ");
                }
                Console.WriteLine();
            }

            Console.ReadLine();
        }
Exemplo n.º 6
0
        public void Run()
        {
            // create random DAG with V vertices and E edges; then add F random edges
            const int v       = 20;
            const int e       = 30;
            const int f       = 10;
            var       digraph = DigraphGenerator.Dag(v, e);

            // add F extra edges
            for (var i = 0; i < f; i++)
            {
                var ve = StdRandom.Uniform(v);
                var we = StdRandom.Uniform(v);
                digraph.AddEdge(ve, we);
            }

            Console.WriteLine(digraph);


            var finder = new DirectedCycleX(digraph);

            if (finder.HasCycle())
            {
                Console.Write("Directed cycle: ");
                foreach (int j in finder.Cycle())
                {
                    Console.Write($"{j} ");
                }
                Console.WriteLine();
            }
            else
            {
                Console.WriteLine("No directed cycle");
            }

            Console.ReadLine();
        }
Exemplo n.º 7
0
        public void Run()
        {
            const int v = 50;
            const int e = 100;

            // Eulerian cycle
            var g1 = DigraphGenerator.EulerianCycle(v, e);

            DirectedEulerianCycle.UnitTest(g1, "Eulerian cycle");
            Console.WriteLine("---------------------------------------------------------------");

            // Eulerian path
            var g2 = DigraphGenerator.EulerianPath(v, e);

            DirectedEulerianCycle.UnitTest(g2, "Eulerian path");
            Console.WriteLine("---------------------------------------------------------------");

            // empty digraph
            var g3 = new Digraph(v);

            DirectedEulerianCycle.UnitTest(g3, "empty digraph");
            Console.WriteLine("---------------------------------------------------------------");

            // self loop
            var g4 = new Digraph(v);
            var v4 = StdRandom.Uniform(v);

            g4.AddEdge(v4, v4);
            DirectedEulerianCycle.UnitTest(g4, "single self loop");
            Console.WriteLine("---------------------------------------------------------------");

            // union of two disjoint cycles
            var h1   = DigraphGenerator.EulerianCycle(v / 2, e / 2);
            var h2   = DigraphGenerator.EulerianCycle(v - v / 2, e - e / 2);
            var perm = new int[v];

            for (var i = 0; i < v; i++)
            {
                perm[i] = i;
            }
            StdRandom.Shuffle(perm);
            var g5 = new Digraph(v);

            for (var vi = 0; vi < h1.V; vi++)
            {
                foreach (int w in h1.Adj(vi))
                {
                    g5.AddEdge(perm[vi], perm[w]);
                }
            }
            for (var vi = 0; vi < h2.V; vi++)
            {
                foreach (int w in h2.Adj(vi))
                {
                    g5.AddEdge(perm[v / 2 + vi], perm[v / 2 + w]);
                }
            }
            DirectedEulerianCycle.UnitTest(g5, "Union of two disjoint cycles");
            Console.WriteLine("---------------------------------------------------------------");

            // random digraph
            var g6 = DigraphGenerator.Simple(v, e);

            DirectedEulerianCycle.UnitTest(g6, "simple digraph");
            Console.WriteLine("---------------------------------------------------------------");


            Console.ReadLine();
        }