Пример #1
0
        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;
                        }
                    }
                }
            }
        }
Пример #2
0
 public AEstrelaPathfind(int alturaGrid, int larguraGrid, IList <Nodo> bloqueados, Nodo inicial, Nodo destino, decimal custoDiagonal, decimal custoVerticalHorizontal)
 {
     AlturaGrid              = alturaGrid;
     LarguraGrid             = larguraGrid;
     Grid                    = new decimal[LarguraGrid, AlturaGrid];
     Bloqueados              = bloqueados;
     Inicial                 = inicial;
     Destino                 = destino;
     Atual                   = inicial;
     CustoDiagonal           = custoDiagonal;
     CustoVerticalHorizontal = custoVerticalHorizontal;
     Gerados                 = new List <Nodo>
     {
         Atual
     };
     Expandidos = new List <Nodo>();
 }