public EnlaceVecino() { vecinoArriba = null; vecinoAbajo = null; vecinoDerecha = null; vecinoIzquierda = null; }
public EnlaceConjunto() { arriba = null; abajo = null; izquierda = null; derecha = null; }
public Cuadro buscarCuadro(int indice, List <Cuadro> visitados, Cuadro cuadro) { visitados.Add(this); //Cuadro cuadro = new Cuadro(); if (this.indice != indice) { if ((this.enlaceConjunto.getArriba() != null) && (!visitados.Contains(this.enlaceConjunto.getArriba()))) { cuadro = this.enlaceConjunto.getArriba().buscarCuadro(indice, visitados, cuadro); } if ((this.enlaceConjunto.getDerecha() != null) && (!visitados.Contains(this.enlaceConjunto.getDerecha()))) { cuadro = this.enlaceConjunto.getDerecha().buscarCuadro(indice, visitados, cuadro); } if ((this.enlaceConjunto.getAbajo() != null) && (!visitados.Contains(this.enlaceConjunto.getAbajo()))) { cuadro = this.enlaceConjunto.getAbajo().buscarCuadro(indice, visitados, cuadro); } if ((this.enlaceConjunto.getIzquierda() != null) && (!visitados.Contains(this.enlaceConjunto.getIzquierda()))) { cuadro = this.enlaceConjunto.getIzquierda().buscarCuadro(indice, visitados, cuadro); } } else { return(this); } if (this.indice == indice) { return(this); } return(cuadro); }
public Cuadro buscarCoordenadas(Posicion posicion, List <Cuadro> visitados, Cuadro cuadro) { visitados.Add(this); if (this.posicion.getX() != posicion.getX() || this.posicion.getY() != posicion.getY()) { if ((this.enlaceConjunto.getArriba() != null) && (!visitados.Contains(this.enlaceConjunto.getArriba()))) { cuadro = this.enlaceConjunto.getArriba().buscarCoordenadas(posicion, visitados, cuadro); } if ((this.enlaceConjunto.getDerecha() != null) && (!visitados.Contains(this.enlaceConjunto.getDerecha()))) { cuadro = this.enlaceConjunto.getDerecha().buscarCoordenadas(posicion, visitados, cuadro); } if ((this.enlaceConjunto.getAbajo() != null) && (!visitados.Contains(this.enlaceConjunto.getAbajo()))) { cuadro = this.enlaceConjunto.getAbajo().buscarCoordenadas(posicion, visitados, cuadro); } if ((this.enlaceConjunto.getIzquierda() != null) && (!visitados.Contains(this.enlaceConjunto.getIzquierda()))) { cuadro = this.enlaceConjunto.getIzquierda().buscarCoordenadas(posicion, visitados, cuadro); } } else { return(this); } if (this.posicion.getX() == posicion.getX() && this.posicion.getY() == posicion.getY()) { return(this); } return(null); }
public void generarCuadro() { this.tamano = 0; Random r = new Random(); int aux = r.Next(3 + (this.tamano)); while (aux < 4) { if (this.principal == null) { Cuadro cuadro = new Cuadro(); cuadro.getPosicion().setX(0); cuadro.getPosicion().setY(0); cuadro.setIndice(this.tamano); this.principal = cuadro; } else { Cuadro cuadro = new Cuadro(); this.tamano += 1; cuadro.setIndice(this.tamano); this.principal.combinar(cuadro, 0, 0); } if (this.tamano == 4) { aux = 5; } else { aux = r.Next(3 + (this.tamano)); } } }
public void combinar(Cuadro c) { Random r = new Random(); int aux = r.Next(3); if (aux == 0) { if (this.enlaceConjunto.getArriba() == null) { this.enlaceConjunto.setArriba(c); c.getEnlaceConjunto().setAbajo(this); return; } else { this.enlaceConjunto.getArriba().combinar(c); } } else if (aux == 1) { if (this.enlaceConjunto.getDerecha() == null) { this.enlaceConjunto.setDerecha(c); c.getEnlaceConjunto().setIzquierda(this); return; } else { this.enlaceConjunto.getDerecha().combinar(c); } } else if (aux == 2) { if (this.enlaceConjunto.getAbajo() == null) { this.enlaceConjunto.setAbajo(c); c.getEnlaceConjunto().setArriba(this); return; } else { this.enlaceConjunto.getAbajo().combinar(c); } } else { if (this.enlaceConjunto.getIzquierda() == null) { this.enlaceConjunto.setIzquierda(c); c.getEnlaceConjunto().setDerecha(this); return; } else { this.enlaceConjunto.getIzquierda().combinar(c); } } }
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 List <Posicion> listaPosiciones() { List <Cuadro> visitados = new List <Cuadro>(); List <Posicion> posiciones = new List <Posicion>(); Cuadro cuadroAux = new Cuadro(); for (int i = 0; i < this.tamano; i++) { posiciones.Add(this.principal.buscarCuadro(i, visitados, cuadroAux).getPosicion()); visitados.Clear(); } return(posiciones); }
public bool condicionContenido(int num, Cuadro cuadro) { bool seCumple = true; List <int> fila = new List <int>(); List <int> columna = new List <int>(); List <Cuadro> visitados = new List <Cuadro>(); fila = cuadro.recorrerFila(fila, visitados); visitados.Clear(); columna = cuadro.recorrerColumna(columna, visitados); if (fila.Contains(num) || columna.Contains(num)) { seCumple = false; } return(seCumple); }
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(); } }
public void setVecinoIzquierda(Cuadro vecinoIzquierda) { this.vecinoIzquierda = vecinoIzquierda; }
public void enlacesConjunto(int i) { List <Cuadro> visitados = new List <Cuadro>(); Posicion posicionAux = new Posicion(); Cuadro cuadroAux = new Cuadro(); Cuadro cuadro = new Cuadro(); cuadro = this.principal.buscarCuadro(i, visitados, cuadroAux); visitados.Clear(); cuadroAux = null; posicionAux.setX(cuadro.getPosicion().getX()); posicionAux.setY(cuadro.getPosicion().getY()); if (cuadro.getEnlaceConjunto().getArriba() == null) { posicionAux.setY(posicionAux.getY() + 1); if (this.principal.buscarCoordenadas(posicionAux, visitados, cuadroAux) != null) { visitados.Clear(); cuadroAux = null; cuadro.getEnlaceConjunto().setArriba(this.principal.buscarCoordenadas(posicionAux, visitados, cuadroAux)); visitados.Clear(); cuadroAux = null; this.principal.buscarCoordenadas(posicionAux, visitados, cuadroAux).getEnlaceConjunto().setAbajo(cuadro); } visitados.Clear(); cuadroAux = null; posicionAux.setX(cuadro.getPosicion().getX()); posicionAux.setY(cuadro.getPosicion().getY()); } if (cuadro.getEnlaceConjunto().getDerecha() == null) { posicionAux.setX(posicionAux.getX() + 1); if (this.principal.buscarCoordenadas(posicionAux, visitados, cuadroAux) != null) { visitados.Clear(); cuadroAux = null; cuadro.getEnlaceConjunto().setDerecha(this.principal.buscarCoordenadas(posicionAux, visitados, cuadroAux)); visitados.Clear(); cuadroAux = null; this.principal.buscarCoordenadas(posicionAux, visitados, cuadroAux).getEnlaceConjunto().setIzquierda(cuadro); } visitados.Clear(); cuadroAux = null; posicionAux.setX(cuadro.getPosicion().getX()); posicionAux.setY(cuadro.getPosicion().getY()); } if (cuadro.getEnlaceConjunto().getAbajo() == null) { posicionAux.setY(posicionAux.getY() - 1); if (this.principal.buscarCoordenadas(posicionAux, visitados, cuadroAux) != null) { visitados.Clear(); cuadroAux = null; cuadro.getEnlaceConjunto().setAbajo(this.principal.buscarCoordenadas(posicionAux, visitados, cuadroAux)); visitados.Clear(); cuadroAux = null; this.principal.buscarCoordenadas(posicionAux, visitados, cuadroAux).getEnlaceConjunto().setArriba(cuadro); } visitados.Clear(); cuadroAux = null; posicionAux.setX(cuadro.getPosicion().getX()); posicionAux.setY(cuadro.getPosicion().getY()); } if (cuadro.getEnlaceConjunto().getAbajo() == null) { posicionAux.setX(posicionAux.getX() - 1); if (this.principal.buscarCoordenadas(posicionAux, visitados, cuadroAux) != null) { visitados.Clear(); cuadroAux = null; cuadro.getEnlaceConjunto().setIzquierda(this.principal.buscarCoordenadas(posicionAux, visitados, cuadroAux)); visitados.Clear(); cuadroAux = null; this.principal.buscarCoordenadas(posicionAux, visitados, cuadroAux).getEnlaceConjunto().setDerecha(cuadro); } visitados.Clear(); cuadroAux = null; posicionAux.setX(cuadro.getPosicion().getX()); posicionAux.setY(cuadro.getPosicion().getY()); } }
public void setPrincipal(Cuadro principal) { this.principal = principal; }
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); } } }
public void setArriba(Cuadro arriba) { this.arriba = arriba; }
public void setAbajo(Cuadro abajo) { this.abajo = abajo; }
public void combinar(Cuadro c, int x, int y) { Random r = new Random(); Posicion posicionAux = new Posicion(); List <Cuadro> visitados = new List <Cuadro>(); Cuadro cuadro = new Cuadro(); int aux = r.Next(3); if (aux == 0) { y += 1; posicionAux.setX(x); posicionAux.setY(y); if (this.enlaceConjunto.getArriba() == null && this.buscarCoordenadas(posicionAux, visitados, cuadro) == null) { this.enlaceConjunto.setArriba(c); c.getEnlaceConjunto().setAbajo(this); c.getPosicion().setX(x); c.getPosicion().setY(y); return; } else { this.enlaceConjunto.getArriba().combinar(c, x, y); } } else if (aux == 1) { x += 1; posicionAux.setX(x); posicionAux.setY(y); if (this.enlaceConjunto.getDerecha() == null && this.buscarCoordenadas(posicionAux, visitados, cuadro) == null) { this.enlaceConjunto.setDerecha(c); c.getEnlaceConjunto().setIzquierda(this); c.getPosicion().setX(x); c.getPosicion().setY(y); return; } else { this.enlaceConjunto.getDerecha().combinar(c, x, y); } } else if (aux == 2) { y -= 1; posicionAux.setX(x); posicionAux.setY(y); if (this.enlaceConjunto.getAbajo() == null && this.buscarCoordenadas(posicionAux, visitados, cuadro) == null) { this.enlaceConjunto.setAbajo(c); c.getEnlaceConjunto().setArriba(this); c.getPosicion().setX(x); c.getPosicion().setY(y); return; } else { this.enlaceConjunto.getAbajo().combinar(c, x, y); } } else { x -= 1; posicionAux.setX(x); posicionAux.setY(y); if (this.enlaceConjunto.getIzquierda() == null && this.buscarCoordenadas(posicionAux, visitados, cuadro) == null) { this.enlaceConjunto.setIzquierda(c); c.getEnlaceConjunto().setDerecha(this); c.getPosicion().setX(x); c.getPosicion().setY(y); return; } else { this.enlaceConjunto.getIzquierda().combinar(c, x, y); } } }
public void setIzquierda(Cuadro izquierda) { this.izquierda = izquierda; }
public void setDerecha(Cuadro derecha) { this.derecha = derecha; }
public void setVecinoDerecha(Cuadro vecinoDerecha) { this.vecinoDerecha = vecinoDerecha; }
public void setVecinoAbajo(Cuadro vecinoAbajo) { this.vecinoAbajo = vecinoAbajo; }
public void setVecinoArriba(Cuadro vecinoArriba) { this.vecinoArriba = vecinoArriba; }