public void Expande() { if (algoritmoProfundidade.Falha) { algoritmoProfundidade = new BuscaEmProfundidadeComVisitados <T>(Problema, ++Limite); } else { algoritmoProfundidade.Expande(); } }
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; }
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 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."); }
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()); } }
public BuscaAprofundamentoIterativo(IProblema <T> problema) { Problema = problema; algoritmoProfundidade = new BuscaEmProfundidadeComVisitados <T>(problema, Limite); }