コード例 #1
0
        //devuelve grilla resuelta
        public GrillaSudoku InicializarGrilla()
        {
            //rellena aleatoreamente primera fila y columna
            GrillaSudoku tempGrilla = new GrillaSudoku {
            };                                                                //grilla temporaria
            int fila = 0;
            int col  = 0;
            int nuevoVal;                                                  //valor para poner dentro de grilla

            List <int> setValor = new List <int>(Enumerable.Range(-9, 9)); //rango de numeros

            List <int> setValor2 = new List <int>();
            Random     rnd       = new Random();                        //numero random
            int        numRandom = 0;

            numRandom = rnd.Next(0, 8);
            nuevoVal  = setValor[numRandom];
            tempGrilla.inicializarCeldas(fila, col, nuevoVal);
            setValor.Remove(nuevoVal);
            for (fila = 1; fila < 9; fila++)
            {
                numRandom = rnd.Next(0, setValor.Count);
                nuevoVal  = setValor[numRandom];
                setValor2.Add(nuevoVal);
                setValor.Remove(nuevoVal);
                tempGrilla.inicializarCeldas(fila, col, nuevoVal);
            }
            fila = 0;
            for (col = 1; col < 3; col++)
            {
                numRandom = rnd.Next(0, setValor2.Count);
                nuevoVal  = setValor2[numRandom];
                while ((nuevoVal == tempGrilla.grilla[1, 0] || (nuevoVal == tempGrilla.grilla[2, 0])))
                {
                    numRandom = rnd.Next(0, setValor2.Count);
                    nuevoVal  = setValor2[numRandom];
                }
                setValor2.Remove(nuevoVal);
                tempGrilla.inicializarCeldas(fila, col, nuevoVal);
            }
            for (col = 3; col < 9; col++)
            {
                numRandom = rnd.Next(0, setValor2.Count);
                nuevoVal  = setValor2[numRandom];
                setValor2.Remove(nuevoVal);
                tempGrilla.inicializarCeldas(fila, col, nuevoVal);
            }
            do
            {
                solucionadorSudoku = new SolucionadorSudoku();
                solucionadorSudoku.resolverGrilla((GrillaSudoku)tempGrilla.Clone(), false);
                GrillaSolucion = solucionadorSudoku.solucion;
            } while (GrillaSolucion == null || GrillaSolucion.estaEnBlanco());
            PermaGrilla = borrarCuadros(GrillaSolucion);
            return(PermaGrilla);
        }
コード例 #2
0
        /// borra cuadros al azar

        public GrillaSudoku borrarAzar(GrillaSudoku grillaTemporal, int simetria, ref int cantidadDeBorrados)
        {
            Random rnd    = new Random();                    //genero num random
            int    fila   = rnd.Next(0, 8);                  //selecciono fila random
            int    column = rnd.Next(0, 8);                  //y columna

            while (grillaTemporal.grilla[fila, column] == 0) // no borro lo que ya este borrado
            {
                fila   = rnd.Next(0, 8);
                column = rnd.Next(0, 8);
            }
            grillaTemporal.inicializarCeldas(fila, column, 0);
            cantidadDeBorrados++;             //incremento la contador
            switch (simetria)
            {
            case 0:                     //vertical
                if (grillaTemporal.grilla[fila, 8 - column] != 0)
                {
                    cantidadDeBorrados++;
                }
                grillaTemporal.inicializarCeldas(fila, 8 - column, 0);
                break;

            case 1:                     //horizontal
                if (grillaTemporal.grilla[8 - fila, column] != 0)
                {
                    cantidadDeBorrados++;
                }
                grillaTemporal.inicializarCeldas(8 - fila, column, 0);
                break;

            case 2:                     //diagonal
                if (grillaTemporal.grilla[column, fila] != 0)
                {
                    cantidadDeBorrados++;
                }
                grillaTemporal.inicializarCeldas(column, fila, 0);
                break;

            default:                     //diagonal
                if (grillaTemporal.grilla[fila, 8 - column] != 0)
                {
                    cantidadDeBorrados++;
                }
                grillaTemporal.inicializarCeldas(column, fila, 0);
                break;
            }
            return(grillaTemporal);
        }
コード例 #3
0
        //clona objeto interfaz clone
        public object Clone()
        {
            //abilito el clonado
            GrillaSudoku p = new GrillaSudoku();

            for (int i = 0; i < Max; i++)
            {
                for (int j = 0; j < Max; j++)
                {
                    p.inicializarCeldas(i, j, grilla[i, j]);
                }
            }
            return(p);
        }