示例#1
0
        public static void MainTest(string[] args)
        {
            int V = int.Parse(args[0]);
            int E = int.Parse(args[1]);

            // Eulerian cycle
            Graph G1 = GraphGenerator.EulerianCycle(V, E);

            EulerianCycle.UnitTest(G1, "Eulerian cycle");

            // Eulerian path
            Graph G2 = GraphGenerator.EulerianPath(V, E);

            EulerianCycle.UnitTest(G2, "Eulerian path");

            // empty graph
            Graph G3 = new Graph(V);

            EulerianCycle.UnitTest(G3, "empty graph");

            // self loop
            Graph G4 = new Graph(V);
            int   v4 = StdRandom.Uniform(V);

            G4.AddEdge(v4, v4);
            EulerianCycle.UnitTest(G4, "single self loop");

            // union of two disjoint cycles
            Graph H1 = GraphGenerator.EulerianCycle(V / 2, E / 2);
            Graph H2 = GraphGenerator.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);
            Graph G5 = new Graph(V);

            for (int v = 0; v < H1.V; v++)
            {
                foreach (int w in H1.Adj(v))
                {
                    G5.AddEdge(perm[v], perm[w]);
                }
            }
            for (int v = 0; v < H2.V; v++)
            {
                foreach (int w in H2.Adj(v))
                {
                    G5.AddEdge(perm[V / 2 + v], perm[V / 2 + w]);
                }
            }
            EulerianCycle.UnitTest(G5, "Union of two disjoint cycles");

            // random digraph
            Graph G6 = GraphGenerator.Simple(V, E);

            EulerianCycle.UnitTest(G6, "simple graph");
        }
示例#2
0
        public static void MainTest(string[] args)
        {
            int V = int.Parse(args[0]);
            int E = int.Parse(args[1]);

            // Eulerian cycle
            Graph G1 = GraphGenerator.EulerianCycle(V, E);

            EulerianPath.UnitTest(G1, "Eulerian cycle");

            // Eulerian path
            Graph G2 = GraphGenerator.EulerianPath(V, E);

            EulerianPath.UnitTest(G2, "Eulerian path");

            // add one random edge
            Graph G3 = new Graph(G2);

            G3.AddEdge(StdRandom.Uniform(V), StdRandom.Uniform(V));
            EulerianPath.UnitTest(G3, "one random edge added to Eulerian path");

            // self loop
            Graph G4 = new Graph(V);
            int   v4 = StdRandom.Uniform(V);

            G4.AddEdge(v4, v4);
            EulerianPath.UnitTest(G4, "single self loop");

            // single edge
            Graph G5 = new Graph(V);

            G5.AddEdge(StdRandom.Uniform(V), StdRandom.Uniform(V));
            EulerianPath.UnitTest(G5, "single edge");

            // empty graph
            Graph G6 = new Graph(V);

            EulerianPath.UnitTest(G6, "empty graph");

            // random graph
            Graph G7 = GraphGenerator.Simple(V, E);

            EulerianPath.UnitTest(G7, "simple graph");
        }