예제 #1
0
 public bool validadorContinuidadeFila(Node filho, BinaryHeapMin minHeap, List <Node> ListaFechada)
 {
     if (filaPrioridadeContem(minHeap, filho))
     {
         return(false);
     }
     if (listaFechadaContem(ListaFechada, filho))
     {
         return(false);
     }
     return(true);
 }
예제 #2
0
 public bool filaPrioridadeContem(BinaryHeapMin PriorityQueue, Node child)
 {
     foreach (Node x in PriorityQueue.heapArray)
     {
         int[,] arrayStateLista = x.stateMatrix;
         int[,] arrayNodeState  = child.stateMatrix;
         if (Equals(arrayStateLista, arrayNodeState))
         {
             return(true);
         }
     }
     return(false);
 }
예제 #3
0
        public void resolver()
        {
            //Grafo = new Graph(controlePai, chaveAtual++, cordEmptyX, cordEmptyY, MatrixInitial);
            chaveAtual = Grafo.nodeRaiz.key + 1;
            // chaveAtual++;
            controlePai = Grafo.nodeRaiz.keyFather;
            rowEmptyY   = Grafo.nodeRaiz.coordinateY;
            colEmpty    = Grafo.nodeRaiz.coordinateX;
            //ver questão da lista de preferencia e comparação
            BinaryHeapMin minHeap = new BinaryHeapMin(10);

            minHeap.insert(Grafo.nodeRaiz);
            //Queue<Node> PriorityLista = new Queue<Node>();
            //PriorityLista.Enqueue(Grafo.nodeRaiz);
            List <Node> ListaFechada = new List <Node>();

            //int c = 0;
            int  depth  = 0;
            bool isGoal = false;
            Node node   = new Node();

            node = minHeap.getMinRoot();
            //node = PriorityLista.Dequeue();
            while (validadorContinuidade(node))//!ValidadordeEstados(node.stateMatrix)
            {
                ListaFechada.Add(node);
                List <Node> Sucessores = new List <Node>();
                expandirSubjacentes(controlePai, node);//deveria receber sucessor,como?
                Node filho = node.filho;
                if (filho != null)
                {
                    while (filho.irmao != null)
                    {
                        filho  = filho.irmao;
                        isGoal = validadorContinuidade(filho);
                        if (isGoal)
                        {
                            if (validadorContinuidadeFila(filho, minHeap, ListaFechada))
                            {
                                minHeap.insert(filho);
                            }
                        }
                    }
                    if (filho.irmao != null)
                    {
                        isGoal = validadorContinuidade(filho);
                        if (isGoal)
                        {
                            if (validadorContinuidadeFila(filho, minHeap, ListaFechada))
                            {
                                minHeap.insert(filho);
                            }
                        }
                    }
                }
                if (isGoal == true)
                {
                    node = minHeap.getMinRoot();
                }
                else
                {
                    break;
                }

                //foreach (Node child in Sucessores)
                //{

                //    if (ValidadordeEstados(child.stateMatrix))
                //    {
                //        //TODO
                //        break;
                //    }
                //    if(filaPrioridadeContem(minHeap, child))
                //    {
                //        continue;
                //    }
                //    if (listaFechadaContem(ListaFechada,child)) {
                //        continue;
                //    }
                //    minHeap.insert(child);


                //}
            }
            ///////vereficarPossibilidades()
        }