//fecha inicio: 09/05/16 //fecha final: 07/06/16 //descripcion: verifica que se pueda mover hacia el lugar correspondiente y que este no se encuentre repetido public void moverAbajo(int estado, List <arboles> listaDeTodosLosElementos, arboles Arbol, int[,] matrix, int capacidadDeMatriz, int i, int j) { cantidadDeMemoria += (32 * matrizGane.Length + 9 + 32) * listaDeTodosLosElementos.Count; cantidadDeMemoria += 32; cantidadDeMemoria += (32 * matrizGane.Length + 9 + 32); cantidadDeMemoria += matrix.Length * 32; cantidadDeMemoria += 32 * 3; comparacion++;//a if (i + 1 < capacidadDeMatriz) { int[,] copia = insertarEnCopia(capacidadDeMatriz, matrix); int numeroCambioDePos = copia[i + 1, j]; cantidadDeMemoria += 32 + 32 * copia.Length; copia[i + 1, j] = copia[i, j]; copia[i, j] = numeroCambioDePos; asignacion += 4; //a comparacion++; // c if (revisarNoRepetidos(listaDeTodosLosElementos, copia, capacidadDeMatriz) == false) { string direccion = "abajo"; asignacion++;// a cantidadDeMemoria += direccion.Length; insertarEnArbolNuevoNodoHijo(direccion, copia, estado, listaDeTodosLosElementos, Arbol, matrix, capacidadDeMatriz); } } return; }
//fecha inicio: 09/05/16 //fecha final: 07/06/16 //descripcion: metodo principal que evalua y recorre al arbol public void posibleSolucion(arboles Arbol, List <arboles> listaDeTodosLosElementos, int[,] matrix, int capacidadDeMatriz, int profundidad) { if (cantidadDeMemoria >= res) { cantDeMemoriaBytes = cantDeMemoriaBytes + 8; cantidadDeMemoria = 0; contBytes = contBytes + 1; } cantidadDeMemoria += (32 * matrizGane.Length + 9 + 32) * listaDeTodosLosElementos.Count; cantidadDeMemoria += (32 * matrizGane.Length + 9 + 32); cantidadDeMemoria += matrix.Length * 32; cantidadDeMemoria += 32 * 2; comparacion++;//c movimientos.Add(Arbol); if (profundidad == profundidadArbol) { movimientos.Remove(movimientos[movimientos.Count - 1]); return; } cantidadDeMemoria += 32; for (int i = 0; i < capacidadDeMatriz; i++) { comparacion++;// c cantidadDeMemoria += 32; for (int j = 0; j < capacidadDeMatriz; j++) { comparacion += 2;//c if (matrix[i, j] == 0) { recorrerM(capacidadDeMatriz, matrix, matrizGane, profundidad); comparacion++; //c if (encontroRespuesta <= profundidad) { return; } moverAbajo(profundidad, listaDeTodosLosElementos, Arbol, matrix, capacidadDeMatriz, i, j); moverIzquierda(profundidad, listaDeTodosLosElementos, Arbol, matrix, capacidadDeMatriz, i, j); moverArriba(profundidad, listaDeTodosLosElementos, Arbol, matrix, capacidadDeMatriz, i, j); moverDerecha(profundidad, listaDeTodosLosElementos, Arbol, matrix, capacidadDeMatriz, i, j); movimientos.Remove(movimientos[movimientos.Count - 1]); cantidadDeMemoria = cantidadDeMemoria + listaDeArbolesHijos.Count * (32 * matrizGane.Length + 9 + 32); return; } } asignacion++; //a comparacion++; //c } asignacion++; //a comparacion++; //c return; }
//fecha inicio: 09/05/16 //fecha final: 07/06/16 //descripcion: inserta en el arbol un nuevo nodo hijo. public void insertarEnArbolNuevoNodoHijo(string direccion, int[,] copia, int estado, List <arboles> listaDeTodosLosElementos, arboles Arbol, int[,] matrix, int capacidadDeMatriz) { arboles nuevoNodo = new arboles(); cantidadDeMemoria += (32 * matrizGane.Length + 9 + 32); nuevoNodo.setCapacidad(capacidadDeMatriz, copia, matrizGane); Arbol.listaDeArbolesHijos.Add(nuevoNodo); listaDeTodosLosElementos.Add(nuevoNodo); estado = estado + 1; Arbol = nuevoNodo; Arbol.direccion = direccion; asignacion += 3;//a posibleSolucion(Arbol, listaDeTodosLosElementos, copia, capacidadDeMatriz, estado); }