Пример #1
0
        private void Resolver()
        {
            Movimentos = new PilhaLista <Movimento>();
            int  novoI;
            int  novoJ;
            int  atualJ  = 0;
            int  atualI  = 0;
            bool moveuSe = false;

            for (int d = 0; d < Direcoes.GetLength(0); d++)
            {
                moveuSe = false;

                if (!Movimentos.EstaVazia)
                {
                    atualI = Movimentos.OTopo().Coordenada[0, 0];
                    atualJ = Movimentos.OTopo().Coordenada[0, 1];
                    novoI  = atualI + Direcoes[d, 1];
                    novoJ  = atualJ + Direcoes[d, 2];
                }
                else
                {
                    novoI = Inicio[0, 0] + Direcoes[d, 1];
                    novoJ = Inicio[0, 1] + Direcoes[d, 2];
                }

                if (Matriz[novoI, novoJ].ToString().Equals(" "))
                {
                    if (!Movimentos.EstaVazia)
                    {
                        Mover(novoI, novoJ, ref atualI, ref atualJ, d);
                        moveuSe = true;
                        d       = -1;
                    }
                    else
                    {
                        atualI = Inicio[0, 0];
                        atualJ = Inicio[0, 1];
                        Mover(novoI, novoJ, ref atualI, ref atualJ, d);
                        moveuSe = true;
                        d       = -1;
                    }
                }
                else
                if (Matriz[novoI, novoJ].ToString().Equals("S"))
                {
                    SalvarCaminho(novoI, novoJ);
                    break;
                }
                else if (d == 7 && moveuSe == false)
                {
                    if (Movimentos.EstaVazia)
                    {
                        todosOsCaminhosEncontrados = true;
                        return;
                    }

                    Movimento atual = Movimentos.Desempilhar();

                    if (!Movimentos.EstaVazia)
                    {
                        Movimento ant = Movimentos.OTopo();
                        atualI = ant.Coordenada[0, 0];
                        atualJ = ant.Coordenada[0, 1];
                        d      = -1;
                    }
                }
            }
        }