Beispiel #1
0
        public void unir(ConjuntoCuadrado conjunto1, ConjuntoCuadrado conjunto2)
        {
            List <Cuadro>   visitados   = new List <Cuadro>();
            List <Posicion> posiciones1 = new List <Posicion>();
            List <Posicion> posiciones2 = new List <Posicion>();
            Cuadro          cuadroAux   = new Cuadro();
            Posicion        posicionAux = new Posicion();

            posiciones1 = conjunto1.listaPosiciones();
            posiciones2 = conjunto2.listaPosiciones();
            foreach (Posicion lugar in posiciones1)
            {
                Cuadro cuadro = new Cuadro();
                cuadro = conjunto1.getPrincipal().buscarCoordenadas(lugar, visitados, cuadroAux);
                posicionAux.setX(cuadro.getPosicion().getX());
                posicionAux.setY(cuadro.getPosicion().getY() + 1);
                if (conjunto2.getPrincipal().buscarCoordenadas(posicionAux, visitados, cuadroAux) != null)
                {
                    visitados.Clear();
                    cuadro.getEnlaceVecino().setVecinoArriba(conjunto2.getPrincipal().buscarCoordenadas(posicionAux, visitados, cuadroAux));
                    visitados.Clear();
                    conjunto2.getPrincipal().buscarCoordenadas(posicionAux, visitados, cuadroAux).getEnlaceVecino().setVecinoAbajo(cuadro);
                }
                visitados.Clear();
                posicionAux.setX(cuadro.getPosicion().getX());
                posicionAux.setY(cuadro.getPosicion().getY() - 2);
                if (conjunto2.getPrincipal().buscarCoordenadas(posicionAux, visitados, cuadroAux) != null)
                {
                    visitados.Clear();
                    cuadro.getEnlaceVecino().setVecinoAbajo(conjunto2.getPrincipal().buscarCoordenadas(posicionAux, visitados, cuadroAux));
                    visitados.Clear();
                    conjunto2.getPrincipal().buscarCoordenadas(posicionAux, visitados, cuadroAux).getEnlaceVecino().setVecinoArriba(cuadro);
                }
                visitados.Clear();
                posicionAux.setX(cuadro.getPosicion().getX() + 1);
                posicionAux.setY(cuadro.getPosicion().getY() + 1);
                if (conjunto2.getPrincipal().buscarCoordenadas(posicionAux, visitados, cuadroAux) != null)
                {
                    visitados.Clear();
                    cuadro.getEnlaceVecino().setVecinoDerecha(conjunto2.getPrincipal().buscarCoordenadas(posicionAux, visitados, cuadroAux));
                    visitados.Clear();
                    conjunto2.getPrincipal().buscarCoordenadas(posicionAux, visitados, cuadroAux).getEnlaceVecino().setVecinoIzquierda(cuadro);
                }
                visitados.Clear();
                posicionAux.setX(cuadro.getPosicion().getX() - 2);
                posicionAux.setY(cuadro.getPosicion().getY());
                if (conjunto2.getPrincipal().buscarCoordenadas(posicionAux, visitados, cuadroAux) != null)
                {
                    visitados.Clear();
                    cuadro.getEnlaceVecino().setVecinoIzquierda(conjunto2.getPrincipal().buscarCoordenadas(posicionAux, visitados, cuadroAux));
                    visitados.Clear();
                    conjunto2.getPrincipal().buscarCoordenadas(posicionAux, visitados, cuadroAux).getEnlaceVecino().setVecinoDerecha(cuadro);
                }
                visitados.Clear();
            }
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Hola");

            FichaSudoku      ficha = new FichaSudoku();
            ConjuntoCuadrado aux   = new ConjuntoCuadrado();

            aux = (ConjuntoCuadrado)ficha.getForma();
            Console.WriteLine(aux.getTamano() + " Tamano");

            List <Cuadro> visitados = new List <Cuadro>();

            aux.getPrincipal().recorrer(aux.getTamano(), 1, visitados);

            Entero aux2 = (Entero)ficha.getContenido();

            foreach (DictionaryEntry elemento in aux2.getContenidoCuadro())
            {
                Console.WriteLine("Indice: " + elemento.Key + " Contenido: " + elemento.Value);
            }
            visitados.Clear();
            for (int i = 0; i < aux.getTamano(); i++)
            {
                Cuadro cuadro = new Cuadro();
                Console.WriteLine(aux.getPrincipal().buscarCuadro(i, visitados, cuadro).getIndice() + " Indice");
                visitados.Clear();
                Console.WriteLine(aux.getPrincipal().buscarCuadro(i, visitados, cuadro).getPosicion().getX() + " X");
                visitados.Clear();
                Console.WriteLine(aux.getPrincipal().buscarCuadro(i, visitados, cuadro).getPosicion().getY() + " Y");
                visitados.Clear();
            }
            visitados.Clear();
            //Console.WriteLine(aux.getPrincipal().buscarCuadro(aux.getTamano(),visitados).getIndice()+ " Indice tamano");

            /*List<int> encontrados = new List<int>();
             * List<Cuadro> visi = new List<Cuadro>();
             *
             * for(int i = 1; i <= aux.getTamano();i++){
             *  Cuadro cuadro = new Cuadro();
             *  Console.WriteLine("Fila: "+i);
             *  aux.getPrincipal().buscarCuadro(i,visitados,cuadro).recorrerFila(encontrados,visi).ForEach(Console.WriteLine);
             *  visitados.Clear();
             *  encontrados.Clear();
             *  visi.Clear();
             * }
             *
             * for(int i = 1; i <= aux.getTamano();i++){
             *  Cuadro cuadro = new Cuadro();
             *  Console.WriteLine("Columna: "+i);
             *  aux.getPrincipal().buscarCuadro(i,visitados,cuadro).recorrerColumna(encontrados,visi).ForEach(Console.WriteLine);
             *  visitados.Clear();
             *  encontrados.Clear();
             *  visi.Clear();
             * }*/
        }
        public FichaSudoku()
        {
            ConjuntoCuadrado  conjuntoCuadrado  = new ConjuntoCuadrado();
            RestriccionSudoku restriccionSudoku = new RestriccionSudoku();
            Entero            entero            = new Entero();

            conjuntoCuadrado.generarCuadro();
            this.setForma(conjuntoCuadrado);
            entero.llenar(restriccionSudoku, conjuntoCuadrado);
            this.setContenido(entero);
        }
Beispiel #4
0
        public void llenar(RestriccionSudoku c, ConjuntoCuadrado conjunto)
        {
            Random        r = new Random();
            List <int>    listaAux = new List <int>();
            List <int>    encontrados = new List <int>();
            List <Cuadro> visitados = new List <Cuadro>();
            int           aux, i = 0;

            while (i < conjunto.getTamano())
            {
                Cuadro cuadro = new Cuadro();
                aux = r.Next(9);
                visitados.Clear();
                if (c.condicionContenido(aux, conjunto.getPrincipal().buscarCuadro(i + 1, visitados, cuadro)) && aux != 0)
                {
                    this.contenidoCuadro.Add(i, aux);
                    i++;
                }
                visitados.Clear();
            }
        }
        public void llenar(RestriccionSudoku c, ConjuntoCuadrado conjunto)
        {
            Random        r = new Random();
            List <int>    listaAux = new List <int>();
            List <int>    encontrados = new List <int>();
            List <Cuadro> visitados = new List <Cuadro>();
            int           aux, i = 0;
            int           aux2 = 0;
            int           aux3 = 0;

            while (i < conjunto.getTamano())
            {
                Cuadro cuadro = new Cuadro();
                aux2 = conjunto.getPrincipal().buscarCuadro(i, visitados, cuadro).recorrerFila(encontrados, visitados).Count;
                visitados.Clear();
                aux3 = conjunto.getPrincipal().buscarCuadro(i, visitados, cuadro).recorrerColumna(listaAux, visitados).Count;
                if (aux2 < aux3)
                {
                    aux = r.Next(aux2);
                }
                else if (aux2 > aux3)
                {
                    aux = r.Next(aux3);
                }
                else
                {
                    aux = r.Next(aux3);
                }
                aux = r.Next(aux3);
                visitados.Clear();
                if (c.condicionContenido(aux, conjunto.getPrincipal().buscarCuadro(i + 1, visitados, cuadro)) && aux != 0)
                {
                    this.contenidoCuadro.Add(i, aux);
                    i++;
                }
                visitados.Clear();
            }
        }
Beispiel #6
0
        public void vincularVecinos(ConjuntoCuadrado conjunto1, ConjuntoCuadrado conjunto2, int i)
        {
            List <Cuadro>   visitados   = new List <Cuadro>();
            List <Posicion> posiciones1 = new List <Posicion>();
            List <Posicion> posiciones2 = new List <Posicion>();
            Cuadro          cuadroAux   = new Cuadro();
            Cuadro          cuadro1     = new Cuadro();
            Cuadro          cuadro2     = new Cuadro();
            bool            puedeUnir   = true;

            cuadro1     = conjunto1.getPrincipal().buscarCuadro(i, visitados, cuadroAux); visitados.Clear();
            cuadro2     = conjunto2.getPrincipal().buscarCuadro(i, visitados, cuadroAux); visitados.Clear();
            posiciones1 = conjunto1.listaPosiciones();
            posiciones2 = conjunto2.listaPosiciones();
            if (cuadro1.getEnlaceConjunto().getArriba() == null && cuadro2.getEnlaceConjunto().getAbajo() == null)
            {
                foreach (Posicion lugar in posiciones2)
                {
                    lugar.setY(lugar.getY() + 1);
                }
                foreach (Posicion lugar in posiciones2)
                {
                    if (posiciones1.Contains(lugar))
                    {
                        puedeUnir = false;
                    }
                }
                if (puedeUnir)
                {
                    this.unir(conjunto1, conjunto2);
                }
                foreach (Posicion lugar in posiciones2)
                {
                    lugar.setY(lugar.getY() - 1);
                }
            }
            else if (cuadro1.getEnlaceConjunto().getAbajo() == null && cuadro2.getEnlaceConjunto().getArriba() == null)
            {
                foreach (Posicion lugar in posiciones2)
                {
                    lugar.setY(lugar.getY() - 1);
                }
                foreach (Posicion lugar in posiciones2)
                {
                    if (posiciones1.Contains(lugar))
                    {
                        puedeUnir = false;
                    }
                }
                if (puedeUnir)
                {
                    this.unir(conjunto1, conjunto2);
                }
                foreach (Posicion lugar in posiciones2)
                {
                    lugar.setY(lugar.getY() + 1);
                }
            }
            else if (cuadro1.getEnlaceConjunto().getDerecha() == null && cuadro2.getEnlaceConjunto().getIzquierda() == null)
            {
                foreach (Posicion lugar in posiciones2)
                {
                    lugar.setX(lugar.getX() + 1);
                }
                foreach (Posicion lugar in posiciones2)
                {
                    if (posiciones1.Contains(lugar))
                    {
                        puedeUnir = false;
                    }
                }
                if (puedeUnir)
                {
                    this.unir(conjunto1, conjunto2);
                }
                foreach (Posicion lugar in posiciones2)
                {
                    lugar.setX(lugar.getX() - 1);
                }
            }
            else if (cuadro1.getEnlaceConjunto().getIzquierda() == null && cuadro2.getEnlaceConjunto().getDerecha() == null)
            {
                foreach (Posicion lugar in posiciones2)
                {
                    lugar.setX(lugar.getX() - 1);
                }
                foreach (Posicion lugar in posiciones2)
                {
                    if (posiciones1.Contains(lugar))
                    {
                        puedeUnir = false;
                    }
                }
                if (puedeUnir)
                {
                    this.unir(conjunto1, conjunto2);
                }
                foreach (Posicion lugar in posiciones2)
                {
                    lugar.setX(lugar.getX() + 1);
                }
            }
        }