private EstadoHLAC TentarLevarOAlface() { EstadoHLAC novoEstado = null; if (homem == MARGEM_INICIAL) { // tenta levar o lobo da margem inicial para a margem final if (alface == MARGEM_INICIAL) { novoEstado = new EstadoHLAC(MARGEM_FINAL, lobo, carneiro, MARGEM_FINAL, "Leva o alface para a margem final"); } } else { // tenta levar o lobo da margem final para a margem inicial if (alface == MARGEM_FINAL) { novoEstado = new EstadoHLAC(MARGEM_INICIAL, lobo, carneiro, MARGEM_INICIAL, "Leva o alface para a margem inicial"); } } if (novoEstado != null && novoEstado.IsEstadoValido) { return(novoEstado); } return(null); }
public override bool Equals(object obj) { if (obj == this) { return(true); } EstadoHLAC e = (obj as EstadoHLAC); return(e != null && e.homem == homem && e.lobo == lobo && e.carneiro == carneiro && e.alface == alface); }
static void Main(string[] args) { //----------------------------------------------------------------- // EstadoAspiradorDePo //----------------------------------------------------------------- /* * EstadoAspiradorDePo inicial = new EstadoAspiradorDePo(EstadoAspiradorDePo.SUJO, EstadoAspiradorDePo.SUJO, EstadoAspiradorDePo.DIREITA, "Inicial"); * No resultado; * * Console.WriteLine(inicial.Descricao); * * Console.WriteLine(); * BuscaLargura buscaLargura = new BuscaLargura(); * resultado = buscaLargura.Buscar(inicial); * if (resultado == null) { * Console.WriteLine("Sem solucao para busca em largura"); * } else { * Console.WriteLine("Busca em largura (" + buscaLargura.Status.NosVisitados + "): " + resultado.MontarCaminho()); * } * * Console.WriteLine(); * BuscaProfundidade buscaProfundidade = new BuscaProfundidade(); * resultado = buscaProfundidade.Buscar(inicial); * if (resultado == null) { * Console.WriteLine("Sem solucao para busca em profundidade"); * } else { * Console.WriteLine("Busca em profundidade (" + buscaProfundidade.Status.NosVisitados + "): " + resultado.MontarCaminho()); * } * * Console.WriteLine(); * BuscaProfundidadeRecursiva buscaProfundidadeRecursiva = new BuscaProfundidadeRecursiva(); * resultado = buscaProfundidadeRecursiva.Buscar(inicial); * if (resultado == null) { * Console.WriteLine("Sem solucao para busca em profundidade recursiva"); * } else { * Console.WriteLine("Busca em profundidade recursiva (" + buscaProfundidadeRecursiva.Status.NosVisitados + "): " + resultado.MontarCaminho()); * } * * Console.WriteLine(); * BuscaProfundidadeIterativa buscaProfundidadeIterativa = new BuscaProfundidadeIterativa(); * resultado = buscaProfundidadeIterativa.Buscar(inicial); * if (resultado == null) { * Console.WriteLine("Sem solucao para busca em profundidade iterativa"); * } else { * Console.WriteLine("Busca em profundidade iterativa (" + buscaProfundidadeIterativa.Status.NosVisitados + "): " + resultado.MontarCaminho()); * } */ //----------------------------------------------------------------- // EstadoAspiradorDePoGrande //----------------------------------------------------------------- /* * int[] quartosIniciais = new int[EstadoAspiradorDePoGrande.TAMANHO]; * for (int i = 0; i < EstadoAspiradorDePoGrande.TAMANHO; i++) { * quartosIniciais[i] = EstadoAspiradorDePoGrande.SUJO; * } * * EstadoAspiradorDePoGrande inicial = new EstadoAspiradorDePoGrande(quartosIniciais, EstadoAspiradorDePoGrande.TAMANHO / 2, "Inicial"); * No resultado; * * Console.WriteLine(inicial.Descricao); * * Console.WriteLine(); * BuscaHeuristicaAEstrela buscaHeuristicaAEstrela = new BuscaHeuristicaAEstrela(); * resultado = buscaHeuristicaAEstrela.Buscar(inicial); * if (resultado == null) { * Console.WriteLine("Sem solucao para busca heuristica A*"); * } else { * Console.WriteLine("Busca heuristica A* (" + buscaHeuristicaAEstrela.Status.NosVisitados + "): " + resultado.MontarCaminho()); * } * * Console.WriteLine(); * BuscaHeuristicaSubidaDaMontanha buscaHeuristicaSubidaDaMontanha = new BuscaHeuristicaSubidaDaMontanha(); * resultado = buscaHeuristicaSubidaDaMontanha.Buscar(inicial); * if (resultado == null) { * Console.WriteLine("Sem solucao para busca heuristica subida da montanha"); * } else { * Console.WriteLine("Busca heuristica subida da montanha (" + buscaHeuristicaSubidaDaMontanha.Status.NosVisitados + "): " + resultado.MontarCaminho()); * } * * Console.WriteLine(); * BuscaLargura buscaLargura = new BuscaLargura(); * resultado = buscaLargura.Buscar(inicial); * if (resultado == null) { * Console.WriteLine("Sem solucao para busca em largura"); * } else { * Console.WriteLine("Busca em largura (" + buscaLargura.Status.NosVisitados + "): " + resultado.MontarCaminho()); * } * * Console.WriteLine(); * BuscaProfundidade buscaProfundidade = new BuscaProfundidade(); * resultado = buscaProfundidade.Buscar(inicial); * if (resultado == null) { * Console.WriteLine("Sem solucao para busca em profundidade"); * } else { * Console.WriteLine("Busca em profundidade (" + buscaProfundidade.Status.NosVisitados + "): " + resultado.MontarCaminho()); * } * * Console.WriteLine(); * BuscaProfundidadeRecursiva buscaProfundidadeRecursiva = new BuscaProfundidadeRecursiva(); * resultado = buscaProfundidadeRecursiva.Buscar(inicial); * if (resultado == null) { * Console.WriteLine("Sem solucao para busca em profundidade recursiva"); * } else { * Console.WriteLine("Busca em profundidade recursiva (" + buscaProfundidadeRecursiva.Status.NosVisitados + "): " + resultado.MontarCaminho()); * } * * Console.WriteLine(); * BuscaProfundidadeIterativa buscaProfundidadeIterativa = new BuscaProfundidadeIterativa(); * resultado = buscaProfundidadeIterativa.Buscar(inicial); * if (resultado == null) { * Console.WriteLine("Sem solucao para busca em profundidade iterativa"); * } else { * Console.WriteLine("Busca em profundidade iterativa (" + buscaProfundidadeIterativa.Status.NosVisitados + "): " + resultado.MontarCaminho()); * } */ //----------------------------------------------------------------- // EstadoHLAC //----------------------------------------------------------------- EstadoHLAC inicial = new EstadoHLAC(EstadoHLAC.MARGEM_INICIAL, EstadoHLAC.MARGEM_INICIAL, EstadoHLAC.MARGEM_INICIAL, EstadoHLAC.MARGEM_INICIAL, "Inicial"); No resultado; Console.WriteLine(inicial.Descricao); Console.WriteLine(); BuscaHeuristicaAEstrela buscaHeuristicaAEstrela = new BuscaHeuristicaAEstrela(); resultado = buscaHeuristicaAEstrela.Buscar(inicial); if (resultado == null) { Console.WriteLine("Sem solucao para busca heuristica A*"); } else { Console.WriteLine("Busca heuristica A* (" + buscaHeuristicaAEstrela.Status.NosVisitados + "): " + resultado.MontarCaminho()); } Console.WriteLine(); /*BuscaHeuristicaSubidaDaMontanha buscaHeuristicaSubidaDaMontanha = new BuscaHeuristicaSubidaDaMontanha(); * resultado = buscaHeuristicaSubidaDaMontanha.Buscar(inicial); * if (resultado == null) { * Console.WriteLine("Sem solucao para busca heuristica subida da montanha"); * } else { * Console.WriteLine("Busca heuristica subida da montanha (" + buscaHeuristicaSubidaDaMontanha.Status.NosVisitados + "): " + resultado.MontarCaminho()); * } */ Console.WriteLine(); BuscaLargura buscaLargura = new BuscaLargura(); resultado = buscaLargura.Buscar(inicial); if (resultado == null) { Console.WriteLine("Sem solucao para busca em largura"); } else { Console.WriteLine("Busca em largura (" + buscaLargura.Status.NosVisitados + "): " + resultado.MontarCaminho()); } Console.WriteLine(); BuscaProfundidade buscaProfundidade = new BuscaProfundidade(); resultado = buscaProfundidade.Buscar(inicial); if (resultado == null) { Console.WriteLine("Sem solucao para busca em profundidade"); } else { Console.WriteLine("Busca em profundidade (" + buscaProfundidade.Status.NosVisitados + "): " + resultado.MontarCaminho()); } Console.WriteLine(); BuscaProfundidadeRecursiva buscaProfundidadeRecursiva = new BuscaProfundidadeRecursiva(); resultado = buscaProfundidadeRecursiva.Buscar(inicial); if (resultado == null) { Console.WriteLine("Sem solucao para busca em profundidade recursiva"); } else { Console.WriteLine("Busca em profundidade recursiva (" + buscaProfundidadeRecursiva.Status.NosVisitados + "): " + resultado.MontarCaminho()); } Console.WriteLine(); BuscaProfundidadeIterativa buscaProfundidadeIterativa = new BuscaProfundidadeIterativa(); resultado = buscaProfundidadeIterativa.Buscar(inicial); if (resultado == null) { Console.WriteLine("Sem solucao para busca em profundidade iterativa"); } else { Console.WriteLine("Busca em profundidade iterativa (" + buscaProfundidadeIterativa.Status.NosVisitados + "): " + resultado.MontarCaminho()); } //----------------------------------------------------------------- // EstadoMissionarioCanibal //----------------------------------------------------------------- /*EstadoMissionarioCanibal inicial = new EstadoMissionarioCanibal(3, 3, EstadoMissionarioCanibal.MARGEM_INICIAL, "Inicial"); * No resultado; * * Console.WriteLine(inicial.Descricao); * * Console.WriteLine(); * BuscaHeuristicaAEstrela buscaHeuristicaAEstrela = new BuscaHeuristicaAEstrela(); * resultado = buscaHeuristicaAEstrela.Buscar(inicial); * if (resultado == null) { * Console.WriteLine("Sem solucao para busca heuristica A*"); * } else { * Console.WriteLine("Busca heuristica A* (" + buscaHeuristicaAEstrela.Status.NosVisitados + "): " + resultado.MontarCaminho()); * } * * Console.WriteLine(); * BuscaHeuristicaSubidaDaMontanha buscaHeuristicaSubidaDaMontanha = new BuscaHeuristicaSubidaDaMontanha(); * resultado = buscaHeuristicaSubidaDaMontanha.Buscar(inicial); * if (resultado == null) { * Console.WriteLine("Sem solucao para busca heuristica subida da montanha"); * } else { * Console.WriteLine("Busca heuristica subida da montanha (" + buscaHeuristicaSubidaDaMontanha.Status.NosVisitados + "): " + resultado.MontarCaminho()); * } * * Console.WriteLine(); * BuscaLargura buscaLargura = new BuscaLargura(); * resultado = buscaLargura.Buscar(inicial); * if (resultado == null) { * Console.WriteLine("Sem solucao para busca em largura"); * } else { * Console.WriteLine("Busca em largura (" + buscaLargura.Status.NosVisitados + "): " + resultado.MontarCaminho()); * } * * Console.WriteLine(); * BuscaProfundidade buscaProfundidade = new BuscaProfundidade(); * resultado = buscaProfundidade.Buscar(inicial); * if (resultado == null) { * Console.WriteLine("Sem solucao para busca em profundidade"); * } else { * Console.WriteLine("Busca em profundidade (" + buscaProfundidade.Status.NosVisitados + "): " + resultado.MontarCaminho()); * } * * Console.WriteLine(); * BuscaProfundidadeRecursiva buscaProfundidadeRecursiva = new BuscaProfundidadeRecursiva(); * resultado = buscaProfundidadeRecursiva.Buscar(inicial); * if (resultado == null) { * Console.WriteLine("Sem solucao para busca em profundidade recursiva"); * } else { * Console.WriteLine("Busca em profundidade recursiva (" + buscaProfundidadeRecursiva.Status.NosVisitados + "): " + resultado.MontarCaminho()); * } * * Console.WriteLine(); * BuscaProfundidadeIterativa buscaProfundidadeIterativa = new BuscaProfundidadeIterativa(); * resultado = buscaProfundidadeIterativa.Buscar(inicial); * if (resultado == null) { * Console.WriteLine("Sem solucao para busca em profundidade iterativa"); * } else { * Console.WriteLine("Busca em profundidade iterativa (" + buscaProfundidadeIterativa.Status.NosVisitados + "): " + resultado.MontarCaminho()); * }*/ //----------------------------------------------------------------- // EstadoRainha //----------------------------------------------------------------- /*EstadoRainha inicial = new EstadoRainha("Inicial"); * No resultado; * * Console.WriteLine(inicial.Descricao); * * Console.WriteLine(); * BuscaHeuristicaAEstrela buscaHeuristicaAEstrela = new BuscaHeuristicaAEstrela(); * resultado = buscaHeuristicaAEstrela.Buscar(inicial); * if (resultado == null) { * Console.WriteLine("Sem solucao para busca heuristica A*"); * } else { * Console.WriteLine("Busca heuristica A* (" + buscaHeuristicaAEstrela.Status.NosVisitados + "): " + resultado.MontarCaminho()); * } * * Console.WriteLine(); * BuscaHeuristicaSubidaDaMontanha buscaHeuristicaSubidaDaMontanha = new BuscaHeuristicaSubidaDaMontanha(); * resultado = buscaHeuristicaSubidaDaMontanha.Buscar(inicial); * if (resultado == null) { * Console.WriteLine("Sem solucao para busca heuristica subida da montanha"); * } else { * Console.WriteLine("Busca heuristica subida da montanha (" + buscaHeuristicaSubidaDaMontanha.Status.NosVisitados + "): " + resultado.MontarCaminho()); * } * * // TODAS AS BUSCAS SEM HEURÍSTICA OU NÃO RESOLVEM, OU DEMORAM * // *MUITO* PARA RESOLVER! * * //Console.WriteLine(); * //BuscaLargura buscaLargura = new BuscaLargura(); * //resultado = buscaLargura.Buscar(inicial); * //if (resultado == null) { * // Console.WriteLine("Sem solucao para busca em largura"); * //} else { * // Console.WriteLine("Busca em largura (" + buscaLargura.Status.NosVisitados + "): " + resultado.MontarCaminho()); * //} * * //Console.WriteLine(); * //BuscaProfundidade buscaProfundidade = new BuscaProfundidade(); * //resultado = buscaProfundidade.Buscar(inicial); * //if (resultado == null) { * // Console.WriteLine("Sem solucao para busca em profundidade"); * //} else { * // Console.WriteLine("Busca em profundidade (" + buscaProfundidade.Status.NosVisitados + "): " + resultado.MontarCaminho()); * //} * * //Console.WriteLine(); * //BuscaProfundidadeRecursiva buscaProfundidadeRecursiva = new BuscaProfundidadeRecursiva(); * //resultado = buscaProfundidadeRecursiva.Buscar(inicial); * //if (resultado == null) { * // Console.WriteLine("Sem solucao para busca em profundidade recursiva"); * //} else { * // Console.WriteLine("Busca em profundidade recursiva (" + buscaProfundidadeRecursiva.Status.NosVisitados + "): " + resultado.MontarCaminho()); * //} * * //Console.WriteLine(); * //BuscaProfundidadeIterativa buscaProfundidadeIterativa = new BuscaProfundidadeIterativa(); * //resultado = buscaProfundidadeIterativa.Buscar(inicial); * //if (resultado == null) { * // Console.WriteLine("Sem solucao para busca em profundidade iterativa"); * //} else { * // Console.WriteLine("Busca em profundidade iterativa (" + buscaProfundidadeIterativa.Status.NosVisitados + "): " + resultado.MontarCaminho()); * //}*/ //----------------------------------------------------------------- // EstadoMapa //----------------------------------------------------------------- /*// vamos traçar uma rota da cidade 8 para a cidade 15 (se for possível) * EstadoMapa.CidadeFinal = EstadoMapa.Mapa.GetVertice(15); * EstadoMapa inicial = new EstadoMapa(EstadoMapa.Mapa.GetVertice(8), 0); * No resultado; * * Console.WriteLine(inicial.Descricao); * * Console.WriteLine(); * BuscaHeuristicaAEstrela buscaHeuristicaAEstrela = new BuscaHeuristicaAEstrela(); * resultado = buscaHeuristicaAEstrela.Buscar(inicial); * if (resultado == null) { * Console.WriteLine("Sem solucao para busca heuristica A*"); * } else { * Console.WriteLine("Busca heuristica A* (" + buscaHeuristicaAEstrela.Status.NosVisitados + "): " + resultado.MontarCaminho()); * } * * Console.WriteLine(); * BuscaHeuristicaSubidaDaMontanha buscaHeuristicaSubidaDaMontanha = new BuscaHeuristicaSubidaDaMontanha(); * resultado = buscaHeuristicaSubidaDaMontanha.Buscar(inicial); * if (resultado == null) { * Console.WriteLine("Sem solucao para busca heuristica subida da montanha"); * } else { * Console.WriteLine("Busca heuristica subida da montanha (" + buscaHeuristicaSubidaDaMontanha.Status.NosVisitados + "): " + resultado.MontarCaminho()); * } * * Console.WriteLine(); * BuscaLargura buscaLargura = new BuscaLargura(); * resultado = buscaLargura.Buscar(inicial); * if (resultado == null) { * Console.WriteLine("Sem solucao para busca em largura"); * } else { * Console.WriteLine("Busca em largura (" + buscaLargura.Status.NosVisitados + "): " + resultado.MontarCaminho()); * } * * Console.WriteLine(); * BuscaProfundidade buscaProfundidade = new BuscaProfundidade(); * resultado = buscaProfundidade.Buscar(inicial); * if (resultado == null) { * Console.WriteLine("Sem solucao para busca em profundidade"); * } else { * Console.WriteLine("Busca em profundidade (" + buscaProfundidade.Status.NosVisitados + "): " + resultado.MontarCaminho()); * } * * Console.WriteLine(); * BuscaProfundidadeRecursiva buscaProfundidadeRecursiva = new BuscaProfundidadeRecursiva(); * resultado = buscaProfundidadeRecursiva.Buscar(inicial); * if (resultado == null) { * Console.WriteLine("Sem solucao para busca em profundidade recursiva"); * } else { * Console.WriteLine("Busca em profundidade recursiva (" + buscaProfundidadeRecursiva.Status.NosVisitados + "): " + resultado.MontarCaminho()); * } * * Console.WriteLine(); * BuscaProfundidadeIterativa buscaProfundidadeIterativa = new BuscaProfundidadeIterativa(); * resultado = buscaProfundidadeIterativa.Buscar(inicial); * if (resultado == null) { * Console.WriteLine("Sem solucao para busca em profundidade iterativa"); * } else { * Console.WriteLine("Busca em profundidade iterativa (" + buscaProfundidadeIterativa.Status.NosVisitados + "): " + resultado.MontarCaminho()); * }*/ Console.ReadKey(); }