Example #1
0
        static G RandomAlgorithm <G, T>(Grid grid, Algorithm algorithm) where G : Grid where T : Cell
        {
            switch (algorithm)
            {
            case Algorithm.AldousBroder: return(AldousBroder.CreateMaze <G, T>(grid as G));

            case Algorithm.BinaryTree: return(BinaryTree.CreateMaze(grid) as G);

            case Algorithm.HuntAndKill: return(HuntAndKill.CreateMaze <G, T>(grid as G));

            case Algorithm.RecursiveBacktracker: return(RecursiveBacktracker.CreateMaze <G, T>(grid as G));

            case Algorithm.Sidewinder: return(Sidewinder.CreateMaze(grid) as G);

            case Algorithm.Wilsons: return(Wilsons.CreateMaze <G, T>(grid as G));

            case Algorithm.Kruskals: return(Kruskals.CreateMaze(grid) as G);

            case Algorithm.Prims: return(Prims.CreateMaze <G, T>(grid as G));

            case Algorithm.TruePrims: return(TruePrims.CreateMaze <G, T>(grid as G));

            case Algorithm.GrowingTree: return(GrowingTree.CreateMaze <G, T>(grid as G));

            case Algorithm.RecursiveDivision: return(RecursiveDivision.CreateMaze(grid) as G);

            case Algorithm.Ellers: return(Ellers.CreateMaze(grid) as G);

            case Algorithm.Houstons: return(Houstons.CreateMaze <G, T>(grid as G));
            }
            return(null);
        }
Example #2
0
 static void Main(string[] args)
 {
     GameOfLife.GameOfLifeMain();
     ParseHtml.ParseHtmlMain(null);
     AllTextSuggestions.AllTextSuggestionsMain(null);
     BSTIteratorDriver.BSTIteratorMain(null);
     TopologicalSort.TopologicalSortMain();
     Prims.PrimsMain(null);
     Kruskals.KruskalsMain(null);
     WordSearch.wordSearchMain();
     CountSmallerAfterNumber2.CountSmallerAfterNumber2Main();
     CountSmallerAfterNumber.countSmallerMain();
     BFS.BFSMain(null);
     StringPermutation.StringPermutationMain(); // Done
     RemoveKFromList.RemoveKFromListMain();
     TripletSum.tripletSumMain();
     SubsetSum.subsetSumMain();
     RotateImage.rotateImageMain();               // Done
     StrStr.strStrMain();                         // Done - exceeding time
     SumOfTwo.SumOfTwoMain();                     // Not done
     SortedSquaredArray.sortedSquaredArrayMain(); // Done
     IsListPalindrome.isListPalindromeMain();     // Done
     SwapLexOrder.swapLexOrderMain();
     TextJustification.textJustificationMain();   // Done
     GoodStringCount.goodStringsCountMain();      // Not done
     WordLadder.wordLadderMain();                 // Not complete by me
     SortingAlgos.sortingAlgosMain();             // Done
     SortByString.sortByStringMain();             // Done
     StringReformatting.stringReformattingMain(); // Done
     ReverseInteger.reverseIntegerMain();         // Done
     ProductExceptSelf.productExceptSelfMain();   // Done
 }
        public void Kruskals_Smoke_Test()
        {
            var graph = new WeightedGraph <char, int>();

            graph.AddVertex('S');
            graph.AddVertex('A');
            graph.AddVertex('B');
            graph.AddVertex('C');
            graph.AddVertex('D');
            graph.AddVertex('T');

            graph.AddEdge('S', 'A', 8);
            graph.AddEdge('S', 'C', 10);

            graph.AddEdge('A', 'B', 10);
            graph.AddEdge('A', 'C', 1);
            graph.AddEdge('A', 'D', 8);

            graph.AddEdge('B', 'T', 4);

            graph.AddEdge('C', 'D', 1);

            graph.AddEdge('D', 'B', 1);
            graph.AddEdge('D', 'T', 10);

            var algo   = new Kruskals <char, int>();
            var result = algo.FindMinimumSpanningTree(graph);

            Assert.AreEqual(graph.VerticesCount - 1, result.Count);
        }
Example #4
0
        public void Kruskals_AdjacencyListGraph_Smoke_Test()
        {
            var graph = new Advanced.Algorithms.DataStructures.Graph.AdjacencyList.WeightedGraph <char, int>();

            graph.AddVertex('S');
            graph.AddVertex('A');
            graph.AddVertex('B');
            graph.AddVertex('C');
            graph.AddVertex('D');
            graph.AddVertex('T');

            graph.AddEdge('S', 'A', 8);
            graph.AddEdge('S', 'C', 10);

            graph.AddEdge('A', 'B', 10);
            graph.AddEdge('A', 'C', 1);
            graph.AddEdge('A', 'D', 8);

            graph.AddEdge('B', 'T', 4);

            graph.AddEdge('C', 'D', 1);

            graph.AddEdge('D', 'B', 1);
            graph.AddEdge('D', 'T', 10);

            var algorithm = new Kruskals <char, int>();
            var result    = algorithm.FindMinimumSpanningTree(graph);

            Assert.AreEqual(graph.VerticesCount - 1, result.Count);
        }
Example #5
0
        static void Main(string[] args)
        {
            // //Magic Value of an Array
            // var intArr = new List<int>{0, 2, 1, 4}; //, 1, 0, 3, 2, 1, 0, 4};

            // Dictionary<int, int> originalMap = new Dictionary<int, int>();
            // for(int i = 0; i < intArr.Count; i++)
            //     originalMap.Add(i, intArr[i]);

            // // Array.Sort(intArr);
            // intArr.Sort();

            // int goodInt = 0, badInt = 0;

            // for (int i = 0; i < intArr.Count; i++)
            // {
            //     int valueAtPosition = originalMap.GetValueOrDefault(i);
            //     // compare sorted array position
            //     if (valueAtPosition != intArr[i])
            //         badInt += 1;
            //     else
            //         goodInt += 1;
            // }

            // System.Console.WriteLine(goodInt - badInt);

            // Kruskal's MST
            Kruskals kmst = new Kruskals();

            kmst.FindMST(4, 5);

            CriticalConnections cc = new CriticalConnections();
            int n = 5;
            // int n = 9;

            IList <IList <int> > connections = new List <IList <int> >();

            connections.Add(new List <int> {
                1, 2
            });
            connections.Add(new List <int> {
                3, 4
            });
            connections.Add(new List <int> {
                1, 3
            });
            connections.Add(new List <int> {
                1, 4
            });
            connections.Add(new List <int> {
                4, 5
            });

            // connections= new List<IList<int>>{
            //     new List<int>{1, 2},
            //     new List<int>{1, 3},
            //     new List<int>{2, 3},
            //     new List<int>{3, 4},
            //     new List<int>{3, 6},
            //     new List<int>{4, 5},
            //     new List<int>{6, 7},
            //     new List<int>{6, 9},
            //     new List<int>{7, 8},
            //     new List<int>{8, 9}
            // };


            cc.GetCriticalConnections(n, connections);

            System.Console.WriteLine();

            var inputString  = "hit";
            var targetString = "cog";

            IList <String> list = new List <String> {
                "hot", "dot", "dog", "lot", "log", "cog"
            };

            int expectedValue = 5;

            var actual_value = new WordLadder().FindMinLadder(inputString, targetString, list);

            Trace.Assert(actual_value == expectedValue, $"Returned value - {actual_value}");

            list = new List <String> {
                "hot", "dot", "dog", "lot", "log"
            };

            expectedValue = 0;
            actual_value  = new WordLadder().FindMinLadder(inputString, targetString, list);

            Trace.Assert(actual_value == expectedValue, $"Returned value - {actual_value}");

            list = new List <String> {
                "hot", "dog", "dot"
            };

            inputString   = "hot";
            targetString  = "dog";
            expectedValue = 3;

            actual_value = new WordLadder().FindMinLadder(inputString, targetString, list);

            Trace.Assert(actual_value == expectedValue, $"Returned value - {actual_value}");

            int size = 5;

            var uf = new UnionFind(size);

            System.Console.WriteLine("Total sets :" + uf.getTotalSet());

            uf.union(0, 1);
            Trace.Assert(uf.getSetSize(0) == 2);

            uf.union(1, 0);
            Trace.Assert(uf.getSetSize(0) == 2);
            Trace.Assert(uf.getTotalSet() == 4);

            uf.union(1, 2);
            Trace.Assert(uf.getSetSize(0) == 3);
            Trace.Assert(uf.getSetSize(3) == 1);
            Trace.Assert(uf.getTotalSet() == 3);

            uf = new UnionFind(12);

            IEnumerable <Edge> edges = new List <Edge> {
                new Edge(1, 2),
                new Edge(1, 7),
                new Edge(1, 8),
                new Edge(2, 3),
                new Edge(2, 6),
                new Edge(3, 4),
                new Edge(3, 5),
                new Edge(8, 9),
                new Edge(8, 12),
                new Edge(9, 10),
                new Edge(9, 11),
                new Edge(11, 12)
            };

            Graph g = new Graph(edges);

            uf = new UnionFind(g.Vertices.Count);

            Trace.Assert(uf.FindCycle(g) == true);

            var obj = new Solution();

            int[] A = new int[] { 1, 4, 2 };
            int[] B = new int[] { 1, 2, 4 };

            int expectedOutput = 2;
            int actualOutput   = obj.MaxUncrossedLines(A, B);

            Trace.Assert(actualOutput == expectedOutput);

            var mde       = new MinimumEditDistance();
            var word_from = "horse";
            var word_to   = "ros";

            expectedOutput = 3;
            actualOutput   = mde.MinDistance(word_from, word_to);

            Trace.Assert(expectedOutput == actualOutput);

            String X   = "ABCBDAB";
            String Y   = "BDCABA";
            var    lcs = new LCS();

            expectedOutput = 4;
            actualOutput   = lcs.LongestCommonSubsequence(X, Y);

            Trace.Assert(actualOutput == expectedOutput);
        }
Example #6
0
        public static void Main(String[] args)
        {
            GraphSearch g = new GraphSearch(9);

            g.AddEdge(0, 1); g.AddEdge(1, 2);
            g.AddEdge(2, 4); g.AddEdge(0, 4);
            g.AddEdge(4, 5); g.AddEdge(0, 3);
            g.AddEdge(3, 5); g.AddEdge(5, 6);
            g.AddEdge(5, 7); g.AddEdge(7, 2);
            g.AddEdge(6, 8); g.AddEdge(2, 8);
            g.AddEdge(1, 0); g.AddEdge(2, 1);
            g.AddEdge(4, 2); g.AddEdge(4, 0);
            g.AddEdge(5, 4); g.AddEdge(3, 0);
            g.AddEdge(5, 3); g.AddEdge(6, 5);
            g.AddEdge(7, 5); g.AddEdge(2, 7);
            g.AddEdge(8, 6); g.AddEdge(8, 2);
            Console.WriteLine("Поиск в глубину от вершины 0");
            g.DeepFirstSearch(0);
            Console.Write("\n Поиск в ширину от вершины 0 \n");
            g.BreadthFirstSearch(0);
            Console.WriteLine();

            int[,] graph = new int[, ] {
                { 0, 6, 17, 11, 0, 0, 0, 0 },
                { 6, 0, 0, 25, 0, 0, 0, 19 },
                { 17, 0, 9, 0, 0, 0, 0, 0 },
                { 11, 25, 8, 0, 2, 0, 0, 0 },
                { 0, 0, 0, 2, 0, 21, 14, 0 },
                { 0, 0, 0, 0, 21, 0, 0, 0 },
                { 0, 0, 0, 0, 14, 0, 0, 9 },
                { 0, 19, 0, 0, 0, 0, 9, 0 }
            };
            Dijkstra t = new Dijkstra();

            Console.WriteLine("\nАлгоритм Дейкстры для вершины 0");
            t.DijkstraAlgorithm(graph, 0);

            Console.WriteLine();
            int      V        = 9;
            int      E        = 12;
            Kruskals kruskals = new Kruskals(V, E);

            kruskals.edge[0].src    = 0;
            kruskals.edge[0].dest   = 1;
            kruskals.edge[0].weight = 2;

            kruskals.edge[1].src    = 0;
            kruskals.edge[1].dest   = 4;
            kruskals.edge[1].weight = 5;

            kruskals.edge[2].src    = 0;
            kruskals.edge[2].dest   = 3;
            kruskals.edge[2].weight = 3;

            kruskals.edge[3].src    = 1;
            kruskals.edge[3].dest   = 2;
            kruskals.edge[3].weight = 10;

            kruskals.edge[4].src    = 2;
            kruskals.edge[4].dest   = 4;
            kruskals.edge[4].weight = 2;

            kruskals.edge[5].src    = 2;
            kruskals.edge[5].dest   = 7;
            kruskals.edge[5].weight = 5;

            kruskals.edge[6].src    = 2;
            kruskals.edge[6].dest   = 8;
            kruskals.edge[6].weight = 6;

            kruskals.edge[7].src    = 3;
            kruskals.edge[7].dest   = 5;
            kruskals.edge[7].weight = 8;

            kruskals.edge[8].src    = 4;
            kruskals.edge[8].dest   = 5;
            kruskals.edge[8].weight = 7;

            kruskals.edge[9].src    = 5;
            kruskals.edge[9].dest   = 7;
            kruskals.edge[9].weight = 3;

            kruskals.edge[10].src    = 5;
            kruskals.edge[10].dest   = 6;
            kruskals.edge[10].weight = 4;

            kruskals.edge[11].src    = 6;
            kruskals.edge[11].dest   = 8;
            kruskals.edge[11].weight = 11;

            kruskals.KruskalAlgorithm();

            Console.ReadLine();
        }