Beispiel #1
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);
        }
Beispiel #2
0
        public ActionResult Index(Busca busca)
        {
            var mapa     = Mapa.FromFile(Server.MapPath("~/mapa.txt"));
            var problema = new ProblemaMapa
            {
                Mapa = mapa
            };

            if (ModelState.IsValid)
            {
                problema.Inicial = mapa.Locais.FirstOrDefault(l => l.Nome.ToLower().Contains(busca.LocalOrigem.ToLower()));
                problema.Destino = mapa.Locais.FirstOrDefault(l => l.Nome.ToLower().Contains(busca.LocalDestino.ToLower()));

                if (problema.Inicial == null)
                {
                    ModelState.AddModelError("LocalOrigem", "Local não encontrado.");
                }

                if (problema.Destino == null)
                {
                    ModelState.AddModelError("LocalDestino", "Local não encontrado.");
                }

                if (ModelState.IsValid)
                {
                    var    algoritmo   = new BuscaBidirecional(problema, busca.A1, busca.A2);
                    string saidaListas = "";

                    while (!algoritmo.AtingiuObjetivo)
                    {
                        algoritmo.Expande();
                        saidaListas += algoritmo.ImprimeListas().Replace("\n", "<br />") + "<br />";
                        saidaListas += "------------------------- <br />";
                    }

                    ViewBag.Lists  = saidaListas;
                    ViewBag.Result = $"Caminho: {algoritmo.ImprimeCaminho()}";
                }
            }
            return(View(busca));
        }
Beispiel #3
0
        static void Main(string[] args)
        {
            var mapa     = Mapa.FromFile();
            var ambiente = new Ambiente();

            //TEstado: Local
            var problemaMapa = new ProblemaMapa
            {
                Mapa    = mapa,
                Inicial = mapa.Cidade(Cidade.Arad),
                Destino = mapa.Cidade(Cidade.Bucareste)
            };

            //TEstado: Ambiente
            var problemaAspirador = new ProblemaAspirador(ambiente);

            var algoritmo = new BuscaCustoUniforme <Local>(problemaMapa);

            while (!algoritmo.AtingiuObjetivo && !algoritmo.Falha)
            {
                Console.WriteLine(algoritmo.ImprimeListas());
                algoritmo.Expande();
            }

            Console.WriteLine(algoritmo.ImprimeListas());

            if (algoritmo.Falha)
            {
                Console.WriteLine("Falha!");
            }
            else
            {
                Console.WriteLine("Resultado: ");
                Console.WriteLine(algoritmo.ImprimeCaminho());
            }

            if (System.Diagnostics.Debugger.IsAttached)
            {
                Console.ReadKey();
            }
        }
Beispiel #4
0
        private static void Run(string[] args)
        {
            var  dict    = new Dictionary <string, string>();
            var  flat    = new List <string>();
            bool verbose = false;

            for (int i = 0; i < args.Length; i++)
            {
                var arg = args[i];
                if (arg.StartsWith("-"))
                {
                    switch (arg[1])
                    {
                    case 'v':
                        verbose = true;
                        break;

                    default:
                        dict[arg[1].ToString()] = args[++i];
                        break;
                    }
                }
                else
                {
                    flat.Add(arg);
                }
            }

            var p = dict.GetValueOrDefault("p", null);

            switch (p)
            {
            case "m":
            {
                var mapa = Mapa.FromFile();

                string
                    origem  = flat.Count > 0 ? flat[0].ToLower() : "zerind",
                    destino = flat.Count > 1 ? flat[1].ToLower() : "sibiu";

                var problema = new ProblemaMapa
                {
                    Mapa    = mapa,
                    Inicial = mapa.Locais.First(l => l.Nome.ToLower().Contains(origem)),
                    Destino = mapa.Locais.First(l => l.Nome.ToLower().Contains(destino)),
                };

                InstanciaAlgoritmo(problema, dict)
                .Executa(verbose);
            }
            break;

            case "a":
            {
                var problema = new ProblemaAspirador(new Ambiente(
                                                         (int)dict.GetIntOrDefault("t", 2),
                                                         (int)dict.GetIntOrDefault("i", 0))
                                                     );

                InstanciaAlgoritmo(problema, dict)
                .Executa(verbose);
            }
            break;

            case null:
                throw new ArgumentException("Problema não especificado.");

            default:
                throw new ArgumentException("Problema não reconhecido.");
            }
        }