Example #1
0
 public void Expande()
 {
     if (algoritmoProfundidade.Falha)
     {
         algoritmoProfundidade = new BuscaEmProfundidadeComVisitados <T>(Problema, ++Limite);
     }
     else
     {
         algoritmoProfundidade.Expande();
     }
 }
Example #2
0
        public Game1(IAlgoritmo algoritmo)
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory              = "Content";
            graphics.PreferredBackBufferWidth  = 1280;
            graphics.PreferredBackBufferHeight = 600;
            IsMouseVisible = true;
            //Window.AllowUserResizing = true;

            this.algoritmo = algoritmo;
        }
Example #3
0
        public BuscaBidirecional(ProblemaMapa problema, TipoAlgoritmo a1 = TipoAlgoritmo.BuscaEmLargura, TipoAlgoritmo a2 = TipoAlgoritmo.BuscaEmLargura)
        {
            Problema = problema;
            var inverso = new ProblemaMapa
            {
                Mapa    = problema.Mapa,
                Inicial = problema.Destino,
                Destino = problema.Inicial
            };

            this.a1 = a1 == TipoAlgoritmo.BuscaEmLargura ?
                      new BuscaEmLargura <Local>(problema) as IAlgoritmo <Local> :
                      new BuscaEmProfundidadeComVisitados <Local>(problema);

            this.a2 = a2 == TipoAlgoritmo.BuscaEmProfundidade ?
                      new BuscaEmLargura <Local>(inverso) as IAlgoritmo <Local> :
                      new BuscaEmProfundidadeComVisitados <Local>(inverso);
        }
Example #4
0
        public static string ImprimeCaminho <T>(this IAlgoritmo <T> algoritmo)
        {
            if (algoritmo.AtingiuObjetivo)
            {
                var lista = new List <T>();
                var no    = algoritmo.Objetivo;

                while (no.Pai != null)
                {
                    lista.Add(no.Estado);
                    no = no.Pai;
                }
                lista.Add(no.Estado);
                lista.Reverse();

                return(string.Join(", ", lista.Select(l => l)));
            }
            throw new InvalidOperationException("Só é possível imprimir o caminho se o objetivo for atingido.");
        }
Example #5
0
        public static void Executa <T>(this IAlgoritmo <T> algoritmo, bool verbose)
        {
            while (!algoritmo.AtingiuObjetivo && !algoritmo.Falha)
            {
                if (verbose)
                {
                    Console.WriteLine(algoritmo.ImprimeListas());
                }
                algoritmo.Expande();
            }

            if (algoritmo.Falha)
            {
                Console.WriteLine("Falha!");
            }
            else
            {
                Console.WriteLine(algoritmo.ImprimeCaminho());
            }
        }
Example #6
0
 public BuscaAprofundamentoIterativo(IProblema <T> problema)
 {
     Problema = problema;
     algoritmoProfundidade = new BuscaEmProfundidadeComVisitados <T>(problema, Limite);
 }