示例#1
0
        public static List <No> Buscar(int[] aiInteiros)
        {
            var noBs = new No();

            noBs.Iniciar(aiInteiros);
            var lst   = QuebraCabeca.Sucessor(noBs);
            var pilha = new Stack <No>();

            pilha = Empilhar(lst, pilha);
            var lista = new List <No>();

            while (pilha.Count > 0)
            {
                var primeiro = pilha.Pop();
                lista.Add(primeiro);

                if (QuebraCabeca.TesteObjetivo(primeiro))
                {
                    Console.WriteLine("Sucesso!");
                    break;
                }

                pilha = Empilhar(QuebraCabeca.Sucessor(primeiro), pilha);
            }

            return(QuebraCabeca.Parentes(lista.Last()));
        }
        public static List <No> Buscar(int[] aiInteiros, int profundidade)
        {
            var noBs = new No();

            noBs.Iniciar(aiInteiros);
            var lst   = QuebraCabeca.Sucessor(noBs);
            var pilha = new Stack <No>();

            pilha = Empilhar(lst, pilha);
            var lista = new List <No>();

            while (pilha.Count > 0)
            {
                var primeiro = pilha.Pop();
                lista.Add(primeiro);

                if (QuebraCabeca.TesteObjetivo(primeiro))
                {
                    return(QuebraCabeca.Parentes(lista.Last()));
                }

                lst = QuebraCabeca.Sucessor(primeiro);

                if (primeiro._profundidade < profundidade)
                {
                    pilha = Empilhar(lst, pilha);
                }
            }

            throw new Exception("Objetivo não alcançado! <3");
        }
示例#3
0
        public static new List <No> Buscar(int[] aiInteiros)
        {
            var noBs = new No();

            noBs.Iniciar(aiInteiros);
            var lst  = QuebraCabeca.Sucessor(noBs);
            var fila = new Queue <No>();

            fila = Ordenar(Enfileirar(lst, fila));
            var lista = new List <No>();


            while (fila.Count > 0)
            {
                var primeiro = fila.Dequeue();
                lista.Add(primeiro);

                if (QuebraCabeca.TesteObjetivo(primeiro))
                {
                    Console.WriteLine("Sucesso!");
                    break;
                }

                fila = Ordenar(fila);
                fila = Enfileirar(QuebraCabeca.Sucessor(primeiro), fila);
            }

            lista = QuebraCabeca.Parentes(lista.Last());
            return(lista);
        }
示例#4
0
        public static new List <No> Buscar(int[] aiInteiros, bool h1)
        {
            var noBs = new No();

            noBs.Iniciar(aiInteiros);
            noBs._heuristica_1 = QuebraCabeca.CalcularHeuristica_1(noBs);
            noBs._heuristica_2 = QuebraCabeca.CalcularHeuristica_2(noBs);
            var lst = QuebraCabeca.Sucessor(noBs);

            while (lst.Count > 0)
            {
                var noGeral = lst[0];

                foreach (var no in lst)
                {
                    if (QuebraCabeca.TesteObjetivo(no))
                    {
                        no._heuristica_1 = no._heuristica_1 + no._custoCaminho;
                        no._heuristica_2 = no._heuristica_2 + no._custoCaminho;
                        return(QuebraCabeca.Parentes(no));
                    }

                    switch (h1)
                    {
                    case true:
                        if (noGeral._heuristica_1 + noGeral._custoCaminho > no._heuristica_1 + no._custoCaminho)
                        {
                            noGeral = no;
                            noGeral._heuristica_1 = no._heuristica_1 + no._custoCaminho;
                        }

                        break;

                    case false:
                        if (noGeral._heuristica_2 + noGeral._custoCaminho > no._heuristica_2 + no._custoCaminho)
                        {
                            noGeral = no;
                            noGeral._heuristica_2 = no._heuristica_2 + no._custoCaminho;
                        }
                        break;
                    }
                }
                lst = QuebraCabeca.Sucessor(noGeral);
            }
            return(lst);
        }
示例#5
0
        public static new List <No> Buscar(int[] aiInteiros)
        {
            var noBs = new No();

            noBs.Iniciar(aiInteiros);
            var lst   = QuebraCabeca.Sucessor(noBs);
            var pilha = new Stack <No>();

            pilha = Empilhar(lst, pilha);
            var lista        = new List <No>();
            var profundidade = 1;

            while (true)
            {
                var primeiro = pilha.Pop();
                lista.Add(primeiro);

                if (QuebraCabeca.TesteObjetivo(primeiro))
                {
                    Console.WriteLine("Sucesso!");
                    break;
                }

                lst = QuebraCabeca.Sucessor(primeiro);

                if (primeiro._profundidade <= profundidade)
                {
                    pilha = Empilhar(lst, pilha);
                }

                if (pilha.Count == 0)
                {
                    profundidade++;
                    pilha = Empilhar(QuebraCabeca.Sucessor(noBs), pilha);
                }

                Console.WriteLine("lst - " + pilha.Count);
            }

            return(QuebraCabeca.Parentes(lista.Last()));
        }