Ejemplo n.º 1
0
    public static void TestEdgeDisjointPath4(bool log = true, int loops = 1000)
    {
        for (int loop = 0; loop < loops; ++loop)
        {
            var g        = new UndirectedGraph <int>();
            var rnd      = new Random();
            int vertices = 10 + rnd.Next(1000);
            int edges    = vertices / 2 + rnd.Next(vertices * vertices / 4);
            for (int i = 0; i < edges; ++i)
            {
                g.AddEdge(rnd.Next(vertices), rnd.Next(vertices));
            }
            if (log)
            {
                Console.WriteLine(g);
            }

            var paths = g.FindEdgeDisjointPaths(0, vertices - 1);
            if (paths.Count() > 0)
            {
                var usedEdges = CheckEDP(g, 0, vertices - 1, paths, log);
                var cut       = g.FindCutEDP(0, usedEdges);
                if (log)
                {
                    Console.WriteLine("Size of cut: {0}", cut.Count());
                    Console.Write("Cut: ");
                    foreach (var v in cut)
                    {
                        Console.Write("{0} ", v);
                    }
                    Console.Write("\n");
                }
                if (cut.Count() != paths.Count())
                {
                    throw new Exception("Cut is not the same size of set of edge-disjoint paths!");
                }
                foreach (var edge in cut)
                {
                    g.RemoveEdge(edge.Item1, edge.Item2);
                }
                if (g.FindPath(0, vertices - 1).Count() > 0)
                {
                    throw new Exception(String.Format("Graph {0} not disconnected by cut!", g));
                }
            }
            else
            {
                if (log)
                {
                    Console.WriteLine("No path, apparently.");
                }
                var path = g.FindPath(0, vertices - 1);
                if (path.Count() > 0)
                {
                    throw new Exception("No path found, but there is a path!");
                }
            }
        }
    }
Ejemplo n.º 2
0
    private static void TestEdgeDisjointPath(UndirectedGraph <int> g, int from, int to)
    {
        Console.WriteLine("Example graph: {0}", g);
        Console.Write("Path from {0} to {1}: ", from, to);
        foreach (int v in g.FindPath(from, to))
        {
            Console.Write("{0}, ", v);
        }
        Console.Write("\n");

        Console.WriteLine("Number of edge-disjoint paths {0} to {1}: {2}", from, to, g.CountEdgeDisjointPaths(from, to));
        Console.WriteLine("They are:");
        foreach (var path in g.FindEdgeDisjointPaths(from, to))
        {
            foreach (int v in path)
            {
                Console.Write("{0}, ", v);
            }
            Console.Write("\n");
        }
        Console.Write("\n");
    }