private void Resolver(int numeroDiscosRestante, Pino origem, Pino destino, Pino intermediario) { if (numeroDiscosRestante > 0) { Resolver(numeroDiscosRestante - 1, origem, intermediario, destino); MoverDisco(origem, destino); Resolver(numeroDiscosRestante - 1, intermediario, destino, origem); } }
private void MoverDisco(Pino pinoInicio, Pino pinoFim) { Thread.Sleep(1000); var disco = pinoInicio.RemoverDisco(); pinoFim.AdicionarDisco(disco); PassoAPasso.Add($"Movendo disco {disco.Id} do pino {pinoInicio.Tipo}, para o pino {pinoFim.Tipo}"); _log.Logar($"TorreHanoi id {Id} -> Movendo disco {disco.Id} do pino {pinoInicio.Tipo}, para o pino {pinoFim.Tipo}", TipoLog.Info); }
private void Resolver(int numeroDiscosRestante, Pino origem, Pino intermediario, Pino destino) { if (numeroDiscosRestante <= 1) { return; } Resolver(numeroDiscosRestante - 1, origem, destino, intermediario); MoverDisco(origem, destino); Resolver(numeroDiscosRestante - 1, intermediario, origem, destino); }
public TorreHanoi(int numeroDiscos, ILogger log) { _log = log; Id = Guid.NewGuid(); Discos = CadastrarDiscos(numeroDiscos); Destino = new Pino("Destino", new List <Disco>()); Intermediario = new Pino("Intermediario", new List <Disco>()); Origem = new Pino("Origem", new List <Disco>(Discos)); DataCriacao = DateTime.Now; Status = TipoStatus.Pendente; PassoAPasso = new List <string>(); }
public TorreHanoi(int numeroDiscos, ILogger log) { _log = log; Id = Guid.NewGuid(); Discos = CadastrarDiscos(numeroDiscos); Torre3 = new Pino("Torre3", new List <Disco>()); Torre2 = new Pino("Torre2", new List <Disco>()); Torre1 = new Pino("Torre1", new List <Disco>(Discos)); DataCriacao = DateTime.Now; Status = TipoStatus.Pendente; PassoAPasso = new List <string>(); }
private void Resolver(int numeroDiscosRestante, Pino origem, Pino intermediario, Pino destino) { _log.Logar($"Resolver Parametros = numeroDiscosRestantes:{numeroDiscosRestante}, origem:{origem.Tipo.ToString()}, intermediario: {intermediario.Tipo.ToString()}, destino: {destino.Tipo.ToString()}", TipoLog.Fluxo); if (numeroDiscosRestante == 1) { MoverDisco(origem, destino); } else { Resolver(numeroDiscosRestante - 1, origem, destino, intermediario); MoverDisco(origem, destino); Resolver(numeroDiscosRestante - 1, intermediario, origem, destino); } }