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);
     }
 }
示例#2
0
        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);
        }
示例#4
0
        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>();
        }
示例#5
0
        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);
            }
        }