private bool VerificarEstadoFinal() { if (Gerados.Contains(Destino)) { return(true); } else { return(false); } }
private void MoverParaMenorCusto() { Gerados.Remove(Atual); Expandidos.Add(Atual); Nodo nodoMenorCusto = Gerados.First(); foreach (Nodo nodo in Gerados) { if (nodoMenorCusto.Peso > nodo.Peso) { nodoMenorCusto = nodo; } } Atual = nodoMenorCusto; Grid[Atual.X, Atual.Y] = Atual.Peso; }
private void GerarNosFilhos() { Nodo gerado; //Adjacente Norte if (Atual.Y - 1 >= 0) { gerado = new Nodo(Atual.X, Atual.Y - 1); if (!Expandidos.Contains(gerado) && !Bloqueados.Contains(gerado) && !Gerados.Contains(gerado)) { gerado.Peso = VerificarCusto(gerado, false); Gerados.Add(gerado); if (VerificarEstadoFinal()) { return; } } } //Adjacente Nordeste if (Atual.X < Grid.GetUpperBound(0)) { if (Atual.Y - 1 >= 0) { gerado = new Nodo(Atual.X + 1, Atual.Y - 1); if (!Expandidos.Contains(gerado) && !Bloqueados.Contains(gerado) && !Gerados.Contains(gerado)) { gerado.Peso = VerificarCusto(gerado, true); Gerados.Add(gerado); if (VerificarEstadoFinal()) { return; } } } } //Adjacente Leste if (Atual.X < Grid.GetUpperBound(0)) { gerado = new Nodo(Atual.X + 1, Atual.Y); if (!Expandidos.Contains(gerado) && !Bloqueados.Contains(gerado) && !Gerados.Contains(gerado)) { gerado.Peso = VerificarCusto(gerado, false); Gerados.Add(gerado); if (VerificarEstadoFinal()) { return; } } } //Adjacente Sudeste if (Atual.X < Grid.GetUpperBound(0)) { if (Atual.Y < Grid.GetUpperBound(1)) { gerado = new Nodo(Atual.X + 1, Atual.Y + 1); if (!Expandidos.Contains(gerado) && !Bloqueados.Contains(gerado) && !Gerados.Contains(gerado)) { gerado.Peso = VerificarCusto(gerado, true); Gerados.Add(gerado); if (VerificarEstadoFinal()) { return; } } } } //Adjacente Sul if (Atual.Y < Grid.GetUpperBound(1)) { gerado = new Nodo(Atual.X, Atual.Y + 1); if (!Expandidos.Contains(gerado) && !Bloqueados.Contains(gerado) && !Gerados.Contains(gerado)) { gerado.Peso = VerificarCusto(gerado, false); Gerados.Add(gerado); if (VerificarEstadoFinal()) { return; } } } //Adjacente Sudoeste if (Atual.X - 1 >= 0) { if (Atual.Y < Grid.GetUpperBound(1)) { gerado = new Nodo(Atual.X - 1, Atual.Y + 1); if (!Expandidos.Contains(gerado) && !Bloqueados.Contains(gerado) && !Gerados.Contains(gerado)) { gerado.Peso = VerificarCusto(gerado, true); Gerados.Add(gerado); if (VerificarEstadoFinal()) { return; } } } } //Adjancente Oeste if (Atual.X - 1 >= 0) { gerado = new Nodo(Atual.X - 1, Atual.Y); if (!Expandidos.Contains(gerado) && !Bloqueados.Contains(gerado) && !Gerados.Contains(gerado)) { gerado.Peso = VerificarCusto(gerado, false); Gerados.Add(gerado); if (VerificarEstadoFinal()) { return; } } } //Adjacente Noroeste if (Atual.X - 1 >= 0) { if (Atual.Y - 1 >= 0) { gerado = new Nodo(Atual.X - 1, Atual.Y - 1); if (!Expandidos.Contains(gerado) && !Bloqueados.Contains(gerado) && !Gerados.Contains(gerado)) { gerado.Peso = VerificarCusto(gerado, true); Gerados.Add(gerado); if (VerificarEstadoFinal()) { return; } } } } }