Пример #1
0
        //rellenar
        public void rellena(GrillaSudoku grid)
        {
            bool algunCambio = false;
            int  numElegido;

            do
            {
                algunCambio = false;
                for (int i = 0; i < 9; i++)
                {
                    for (int j = 0; j < 9; j++)
                    {
                        if (grid.grilla[i, j] == 0)
                        {
                            numElegido = ListaPosible(i, j, grid);
                            if (numElegido == 1)
                            {
                                grid.setearCeldaUsuario(i, j, PrimerVerdadero());

                                algunCambio = (grid.grilla[i, j] != 0);
                            }
                        }
                    }
                }
            } while (algunCambio == true && !estaResuelto(grid));
        }
Пример #2
0
        //resolver grilla
        public bool resolverGrilla(GrillaSudoku g, bool chequearUnicidad)
        {
            GrillaSudoku grilla = new GrillaSudoku();

            grilla = (GrillaSudoku)g.Clone();
            int  i, eleccion, r, c, numeroElegido;
            bool bien, got_one, resuelto, result;

            got_one = false;
            recursiones++;
            rellena(grilla);
            if (estaResuelto(grilla))
            {
                if (numSolns > 0)
                {
                    stop   = true;
                    result = false;
                }
                else
                {
                    numSolns++;
                    final[numSolns] = (GrillaSudoku)g.Clone();
                    result          = true;
                    solucion        = grilla;
                }
            }
            else
            {
                if (!masPequeña(grilla, out r, out c, out numeroElegido))
                {
                    result = false;
                }
                else
                {
                    i       = 1;
                    bien    = false;
                    got_one = false;
                    while (!bien && i <= numeroElegido)
                    {
                        eleccion       = PickeoUno();
                        list[eleccion] = false;
                        grilla.setearCeldaUsuario(r, c, eleccion);

                        if (recursiones < max)
                        {
                            resuelto = (resolverGrilla(grilla, chequearUnicidad));
                        }
                        else
                        {
                            resuelto = false;
                        }
                        if (stop == true)
                        {
                            bien    = true;
                            got_one = true;
                        }
                        else
                        {
                            got_one = (got_one || resuelto);
                            if (!chequearUnicidad)
                            {
                                bien = got_one;
                            }
                        }
                        i++;
                    }
                    result = got_one;
                }
            }
            return(result);
        }