コード例 #1
0
        private void MoveDisk(Stick from, Stick to)
        {
            var aDisk   = from.Remove();
            var message = $"{aDisk.Size:D2}: {from.Id} -> {to.Id}";

            _log.AppendLine(message);
            to.Add(aDisk);
        }
コード例 #2
0
        private void DoSolve(int n, Stick initial, Stick buffer, Stick target)
        {
            if (n <= 0)
            {
                return;
            }

            DoSolve(n - 1, initial, target, buffer);

            MoveDisk(initial, target);

            DoSolve(n - 1, buffer, initial, target);
        }
コード例 #3
0
        /// <summary>
        /// creates Hanoi tower game solver with specific amount of disks and 3 sticks
        /// all disks are on the first stick initially
        /// </summary>
        /// <param name="n"></param>
        public HanoiGameSolver(int n)
        {
            _initial = new Stick(n);
            _buffer  = new Stick();
            _target  = new Stick();


            if (n > 31)
            {
                throw new Exception($"Too many disks {n}!");
            }
            _log = new StringBuilder((int)Math.Pow(2, n) - 1);
        }