Exemplo n.º 1
0
        static void Main(string[] args)
        {

            Cell[,] board = new Cell [,]{
            {new Cell(0, 0), new Cell(0, 0), new Cell(0, 0), new Cell(2, 1), new Cell(0, 0), new Cell(2, 8), new Cell(0, 0), new Cell(2, 3), new Cell(2, 2)},
            {new Cell(2, 5), new Cell(2, 9), new Cell(0, 0), new Cell(0, 0), new Cell(2, 4), new Cell(0, 0), new Cell(0, 0), new Cell(0, 0), new Cell(0, 0)},
            {new Cell(0, 0), new Cell(0, 0), new Cell(0, 0), new Cell(2, 7), new Cell(0, 0), new Cell(0, 0), new Cell(2, 4), new Cell(0, 0), new Cell(0, 0)},
            {new Cell(2, 9), new Cell(0, 0), new Cell(0, 0), new Cell(0, 0), new Cell(0, 0), new Cell(2, 6), new Cell(0, 0), new Cell(0, 0), new Cell(0, 0)},
            {new Cell(2, 8), new Cell(0, 0), new Cell(2, 3), new Cell(0, 0), new Cell(2, 2), new Cell(0, 0), new Cell(2, 6), new Cell(0, 0), new Cell(2, 5)},
            {new Cell(0, 0), new Cell(0, 0), new Cell(0, 0), new Cell(2, 4), new Cell(0, 0), new Cell(0, 0), new Cell(0, 0), new Cell(0, 0), new Cell(2, 9)},
            {new Cell(0, 0), new Cell(0, 0), new Cell(2, 7), new Cell(0, 0), new Cell(0, 0), new Cell(2, 4), new Cell(0, 0), new Cell(0, 0), new Cell(0, 0)},
            {new Cell(0, 0), new Cell(0, 0), new Cell(0, 0), new Cell(0, 0),  new Cell(2, 3), new Cell(0, 0), new Cell(0, 0), new Cell(2, 8), new Cell(2, 4)},
            {new Cell(2, 2), new Cell(2, 1), new Cell(0, 0), new Cell(2, 8), new Cell(0, 0), new Cell(2, 9), new Cell(0, 0), new Cell(0, 0), new Cell(0, 0)}};

            Print(board);

            Console.WriteLine();

            if (Solve(board, 0, 0))
            {
                Console.WriteLine("Found a Solution!");
                Print(board);
            }
            else
            {
                Console.WriteLine("No solution found");
            }

            
        }
Exemplo n.º 2
0
        public static bool Solve(Cell[,] board, int r, int c)
        {
            if (r == 9)
            {
                int count = 0;
                for (int i = 0; i < 9; i++)                                                // check to see if board is solved
                {
                    for (int j = 0; j < 9; j++)
                    {
                        count += board[i, j].changable > 0 ? 1 : 0;
                    }
                }
                if (count == 81)
                    return true;
                else
                    return false;
            }
            if (board[r, c].changable >= 1)                                                 // check to see if value is changable
            {
                int nextR = r;
                int nextC = c + 1;
                if (nextC == 9)
                {
                    nextR = r + 1; nextC = 0;
                }
                return Solve(board, nextR, nextC);                                          // if value is not changable send the next cell through solver
            }
            else
            {
                bool[] used = new bool[9];
                for (int i = 0; i < 9; i++)                                                 // check row to see what values are used
                {
                    if (board[r, i].changable >= 1)
                        used[board[r, i].val - 1] = true;
                }
                for (int i = 0; i < 9; i++)                                                 // check column to see what values are used
                {
                    if (board[i, c].changable >= 1)
                        used[board[i, c].val - 1] = true;
                }

                for (int i = r - (r % 3); i < r - (r % 3) + 3; i++)                         // check box to see what values are used
                {
                    for (int j = c - (c % 3); j < c - (c % 3) + 3; j++)
                    {
                        if (board[i, j].changable >= 1)
                            used[board[i, j].val - 1] = true;
                    }
                }
                for (int i = 0; i < used.Length; i++)                                       // assign value to board
                {
                    if (!used[i])
                    {
                        board[r, c].changable = 1;
                        board[r, c].val = i + 1;
                        int nextR = r;
                        int nextC = c + 1;
                        if (nextC == 9)
                        {
                            nextR = r + 1; nextC = 0;
                        }
                        if (Solve(board, nextR, nextC))
                            return true;
                        for (int m = 0; m < 9; m++)
                            for (int n = 0; n < 9; n++)
                            {
                                if (m > r || (m == r && n >= c))
                                {
                                    if (board[m, n].changable == 1)
                                    {
                                        board[m, n].changable = 0;
                                        board[m, n].val = 0;
                                    }
                                }
                            }

                    }
                }

            }
            return false;
        }
Exemplo n.º 3
0
 public static void Print(Cell [,] board)
 {
     for (int i = 0; i < 9; i++)
     {
         for (int j = 0; j < 9; j++)
         {
             Console.Write( "{0} ", board[i,j].val);
         }
         Console.WriteLine();
     }
 }