예제 #1
0
        //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;
        }
예제 #2
0
        //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;
        }
예제 #3
0
        //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);
        }