示例#1
0
        public void Go()
        {
            algorithmX          = new AlgorithmX();
            algorithmX.callBack = CallBack;
            tableau             = new Node[5 * 25 + 3 * 8, 130];

            index = 0;
            HouseConstraints();
            ElementConstraints();
            ExtraConstraints();
            SingleConstraints();
            PairConstraints();
            NextToConstraints();
            RightOfConstraints();

            ClearCells();
            algorithmX.Init(tableau);

            bool retVal = algorithmX.Search();

            if (retVal)
            {
                Console.WriteLine("Congratulations !");
            }
            else
            {
                Console.WriteLine("No solution");
            }
        }
示例#2
0
        void Go()
        {
            int count = 0;

            foreach (Position position in positions)
            {
                int column = 60 + position.p.name;
                tableau[count, column] = new Node(count, column);
                foreach (Point p in position.p.content)
                {
                    column = p.X + position.position.X + (p.Y + position.position.Y) * width;

                    if (excluded != null)
                    {
                        int gt = 0;
                        foreach (Point e in excluded)
                        {
                            if (column > e.X + e.Y * width)
                            {
                                gt++;
                            }
                        }
                        column -= gt;
                    }

                    tableau[count, column] = new Node(count, column);
                }
                count++;
            }

            bool retVal = true;

            algorithmX.Init(tableau);

            DateTime t0 = DateTime.Now;

            retVal = algorithmX.Search();
            DateTime t1 = DateTime.Now;

            if (retVal)
            {
                Console.WriteLine("\nCongratulations !, solved in {0} ms", (t1 - t0).TotalMilliseconds);
            }
            else
            {
                Console.WriteLine("\nSorry, no solution !");
            }

            CheckSolution();

            foreach (int index in algorithmX.result)
            {
                Console.WriteLine("{0}  {1}", positions[index].position.X, positions[index].position.Y);
                positions[index].p.Print();
                Console.WriteLine();
            }
        }
示例#3
0
        void Go()
        {
            AlgorithmX algorithmX = new AlgorithmX();

            algorithmX.callBack = CallBack;
            Node[,] tableau     = new Node[94, 46];


            for (int e = 0; e < 94; e++)
            {
                int r = e / 8;
                int c = e % 8;
                for (int rule = 0; rule < 46; rule++)
                {
                    if (e < 64 && (rule == r || rule == 8 + c))
                    {
                        tableau[e, rule] = new Node(e, rule);
                    }
                    else if (e < 64 && rule == 16 + r + c)
                    {
                        tableau[e, rule] = new Node(e, rule);
                    }
                    else if (e < 64 && rule == 31 + 7 - r + c)
                    {
                        tableau[e, rule] = new Node(e, rule);
                    }
                    else if (e >= 64 && rule == e - 64 + 16)
                    {
                        tableau[e, rule] = new Node(e, rule);
                    }
                }
            }

            bool retVal = true;

            algorithmX.Init(tableau);

            DateTime t0 = DateTime.Now;

            retVal = algorithmX.Search();
            DateTime t1 = DateTime.Now;


            if (retVal)
            {
                Console.WriteLine("\nCongratulations !, solved in {0} ms", (t1 - t0).TotalMilliseconds);
            }
            else
            {
                Console.WriteLine("\nSorry, no solution !");
            }

            CheckSolution(algorithmX.result);
        }
示例#4
0
        void Go()
        {
            AlgorithmX algorithmX = new AlgorithmX();

            algorithmX.callBack = CallBack;
            Node[,] tableau     = new Node[729, 324];
            StreamReader stream = new StreamReader(Directory.GetParent(Environment.CurrentDirectory).Parent.FullName + "/sudoku22533.txt");

            string s = stream.ReadLine();

            string[] split = s.Split(new char[] { '=' });
            for (int i = 0; i < 9; i++)
            {
                for (int j = 0; j < 9; j++)
                {
                    string c = split[split.Length - 1].Substring(9 * i + j, 1);
                    sudoku[i, j] = int.Parse(c == "." ? "0" : c);
                }
            }

            Print();

            for (int r = 0; r < 9; r++)
            {
                for (int c = 0; c < 9; c++)
                {
                    for (int n = 0; n < 9; n++)
                    {
                        int tr = 81 * r + 9 * c + n;
                        int tc = 9 * r + c;
                        if (sudoku[r, c] == 0 || sudoku[r, c] - 1 == n)
                        {
                            tableau[tr, tc] = new Node(tr, tc);
                        }
                    }
                }
            }

            for (int r = 0; r < 9; r++)
            {
                for (int n = 0; n < 9; n++)
                {
                    for (int c = 0; c < 9; c++)
                    {
                        int tr = 81 * r + 9 * c + n;
                        int tc = 81 + 9 * r + n;
                        if (sudoku[r, c] == 0 || sudoku[r, c] - 1 == n)
                        {
                            tableau[tr, tc] = new Node(tr, tc);
                        }
                    }
                }
            }

            for (int c = 0; c < 9; c++)
            {
                for (int n = 0; n < 9; n++)
                {
                    for (int r = 0; r < 9; r++)
                    {
                        int tr = 81 * r + 9 * c + n;
                        int tc = 162 + 9 * c + n;
                        if (sudoku[r, c] == 0 || sudoku[r, c] - 1 == n)
                        {
                            tableau[tr, tc] = new Node(tr, tc);
                        }
                    }
                }
            }

            for (int i1 = 0; i1 < 3; i1++)
            {
                for (int i2 = 0; i2 < 3; i2++)
                {
                    for (int n = 0; n < 9; n++)
                    {
                        for (int j1 = 0; j1 < 3; j1++)
                        {
                            for (int j2 = 0; j2 < 3; j2++)
                            {
                                int tr = 81 * (3 * i1 + j1) + 9 * (3 * i2 + j2) + n;
                                int tc = 243 + 9 * (3 * i1 + i2) + n;
                                if (sudoku[3 * i1 + j1, 3 * i2 + j2] == 0 || sudoku[3 * i1 + j1, 3 * i2 + j2] - 1 == n)
                                {
                                    tableau[tr, tc] = new Node(tr, tc);
                                }
                            }
                        }
                    }
                }
            }

            bool retVal = true;

            algorithmX.Init(tableau);

            DateTime t0 = DateTime.Now;

            retVal = algorithmX.Search();
            DateTime t1 = DateTime.Now;


            if (retVal)
            {
                Console.WriteLine("\nCongratulations !, solved in {0} ms", (t1 - t0).TotalMilliseconds);
            }
            else
            {
                Console.WriteLine("\nSorry, no solution !");
            }

            CheckSolution(algorithmX.result);
        }