Ejemplo n.º 1
0
        // admisible y consistente: devolvera la suma del numero de casillas horizontales
        // y verticales que separan al nodo e del destino
        private double heuristic2(NodeCool e)
        {
            int inix  = (int)(e.GetPos() / gm.columns);
            int iniy  = (int)(e.GetPos() - inix * gm.columns);
            int destx = (int)(f_ / gm.columns);
            int desty = (int)(f_ - destx * gm.columns);

            double A = Math.Abs(destx - inix);
            double B = Math.Abs(desty - iniy);

            return(A + B);
        }
Ejemplo n.º 2
0
        // admisible, consistente y dominante: devolvera la distancia euclidea entre el
        // nodo e y el destino
        private double heuristic3(NodeCool e)
        {
            int inix  = (int)(e.GetPos() / gm.columns);
            int iniy  = (int)(e.GetPos() - inix * gm.columns);
            int destx = (int)(f_ / gm.columns);
            int desty = (int)(f_ - destx * gm.columns);

            double catA = destx - inix;
            double catB = desty - iniy;

            return(Math.Sqrt(catA * catA + catB * catB)); // hipotenusa
        }
Ejemplo n.º 3
0
        // admisible e inconsistente: devolvera una h aleatoria, nunca mayor que el
        // coste fisico minimo de ir desde el nodo actual al destino (1 x numCasillas hasta el destino)
        private double heuristic1(NodeCool e)
        {
            int inix  = (int)(e.GetPos() / gm.columns);
            int iniy  = (int)(e.GetPos() - inix * gm.columns);
            int destx = (int)(f_ / gm.columns);
            int desty = (int)(f_ - destx * gm.columns);

            double A = Math.Abs(destx - inix);
            double B = Math.Abs(desty - iniy);

            System.Random rnd = new System.Random();

            return(rnd.Next(0, (int)(A + B + 1)));;
        }