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; } } } }