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); }
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)); }
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(); } }
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."); } }