Exemple #1
0
        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;
        }
Exemple #2
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;
                        }
                    }
                }
            }
        }