public static List <No> Buscar(int[] aiInteiros) { var noBs = new No(); noBs.Iniciar(aiInteiros); var lst = QuebraCabeca.Sucessor(noBs); var pilha = new Stack <No>(); pilha = Empilhar(lst, pilha); var lista = new List <No>(); while (pilha.Count > 0) { var primeiro = pilha.Pop(); lista.Add(primeiro); if (QuebraCabeca.TesteObjetivo(primeiro)) { Console.WriteLine("Sucesso!"); break; } pilha = Empilhar(QuebraCabeca.Sucessor(primeiro), pilha); } return(QuebraCabeca.Parentes(lista.Last())); }
public static List <No> Buscar(int[] aiInteiros, int profundidade) { var noBs = new No(); noBs.Iniciar(aiInteiros); var lst = QuebraCabeca.Sucessor(noBs); var pilha = new Stack <No>(); pilha = Empilhar(lst, pilha); var lista = new List <No>(); while (pilha.Count > 0) { var primeiro = pilha.Pop(); lista.Add(primeiro); if (QuebraCabeca.TesteObjetivo(primeiro)) { return(QuebraCabeca.Parentes(lista.Last())); } lst = QuebraCabeca.Sucessor(primeiro); if (primeiro._profundidade < profundidade) { pilha = Empilhar(lst, pilha); } } throw new Exception("Objetivo não alcançado! <3"); }
public static new List <No> Buscar(int[] aiInteiros) { var noBs = new No(); noBs.Iniciar(aiInteiros); var lst = QuebraCabeca.Sucessor(noBs); var fila = new Queue <No>(); fila = Ordenar(Enfileirar(lst, fila)); var lista = new List <No>(); while (fila.Count > 0) { var primeiro = fila.Dequeue(); lista.Add(primeiro); if (QuebraCabeca.TesteObjetivo(primeiro)) { Console.WriteLine("Sucesso!"); break; } fila = Ordenar(fila); fila = Enfileirar(QuebraCabeca.Sucessor(primeiro), fila); } lista = QuebraCabeca.Parentes(lista.Last()); return(lista); }
public static new List <No> Buscar(int[] aiInteiros, bool h1) { var noBs = new No(); noBs.Iniciar(aiInteiros); noBs._heuristica_1 = QuebraCabeca.CalcularHeuristica_1(noBs); noBs._heuristica_2 = QuebraCabeca.CalcularHeuristica_2(noBs); var lst = QuebraCabeca.Sucessor(noBs); while (lst.Count > 0) { var noGeral = lst[0]; foreach (var no in lst) { if (QuebraCabeca.TesteObjetivo(no)) { no._heuristica_1 = no._heuristica_1 + no._custoCaminho; no._heuristica_2 = no._heuristica_2 + no._custoCaminho; return(QuebraCabeca.Parentes(no)); } switch (h1) { case true: if (noGeral._heuristica_1 + noGeral._custoCaminho > no._heuristica_1 + no._custoCaminho) { noGeral = no; noGeral._heuristica_1 = no._heuristica_1 + no._custoCaminho; } break; case false: if (noGeral._heuristica_2 + noGeral._custoCaminho > no._heuristica_2 + no._custoCaminho) { noGeral = no; noGeral._heuristica_2 = no._heuristica_2 + no._custoCaminho; } break; } } lst = QuebraCabeca.Sucessor(noGeral); } return(lst); }
public static new List <No> Buscar(int[] aiInteiros) { var noBs = new No(); noBs.Iniciar(aiInteiros); var lst = QuebraCabeca.Sucessor(noBs); var pilha = new Stack <No>(); pilha = Empilhar(lst, pilha); var lista = new List <No>(); var profundidade = 1; while (true) { var primeiro = pilha.Pop(); lista.Add(primeiro); if (QuebraCabeca.TesteObjetivo(primeiro)) { Console.WriteLine("Sucesso!"); break; } lst = QuebraCabeca.Sucessor(primeiro); if (primeiro._profundidade <= profundidade) { pilha = Empilhar(lst, pilha); } if (pilha.Count == 0) { profundidade++; pilha = Empilhar(QuebraCabeca.Sucessor(noBs), pilha); } Console.WriteLine("lst - " + pilha.Count); } return(QuebraCabeca.Parentes(lista.Last())); }