Exemple #1
0
        public static HashSet <HashSet <int> > Run(Graph.Graph graph)
        {
            // Initial conditions
            var adjacency         = graph.CreateAdjacencyMatrix();
            var invertedAdjacency = adjacency.Fill(1) - adjacency;
            var cover             = IntializeCover(invertedAdjacency); // C
            var subCover          = new HashSet <SubMatrix>();         // X

            while (true)
            {
                var nextCover = Iteration(cover, subCover);

                if (nextCover.SetEquals(cover))
                {
                    break;
                }

                cover    = nextCover;
                subCover = CalculateSubCover(nextCover);
            }

            var stableSets = ExtractStableSets(cover);
            var result     = ExtractResult(stableSets);

            return(result);
        }
Exemple #2
0
        static void DirectedDemo()
        {
            var graph = new Graph(
                new int[][]
            {
                new int [] { 1, 2 },        // 0 -> 1, 2
                new int [] { 2 },           // 1 -> 2
                new int [] { },             // 2 -> x
                new int [] { 1, 2 }         // 3 -> 1, 2
            }
                );

            var adjacency = graph.CreateAdjacencyMatrix();
            var incidence = graph.CreateDirectedIncidenceMatrix();
            var kirchhoff = graph.CreateKirchhoffMatrix();

            Console.WriteLine("Adjacency:");
            Console.WriteLine(adjacency);
            Console.WriteLine("Directed incidence:");
            Console.WriteLine(incidence);
            Console.WriteLine("Kirchhoff:");
            Console.WriteLine(kirchhoff);

            Console.WriteLine("\nConversions. \n");
            Console.WriteLine("Adjacency -> Kirchhoff");
            Console.WriteLine(Graph.ConvertAdjacencyToKirchhoff(adjacency));
            Console.WriteLine("Kirchhoff -> Adjacency");
            Console.WriteLine(Graph.ConvertKirchhoffToAdjacency(kirchhoff));
            Console.WriteLine("Adjacency -> Incidence");
            Console.WriteLine(Graph.ConvertAdjacencyToDirectedIncidence(adjacency));
            Console.WriteLine("Incidence -> Adjacency");
            Console.WriteLine(Graph.ConvertDirectedIncidenceToAdjacency(incidence));
            Console.WriteLine("Incidence -> Kirchhoff (only works right for a directed graph)");
            Console.WriteLine(Graph.ConvertDirectedIncidenceToKirchhoff(incidence));
        }