コード例 #1
0
        public void MoveOne(HanoiPeg fromPeg, HanoiPeg toPeg)
        {
            HanoiDisk disk = fromPeg.Pop();
            HanoiDisk peek = toPeg.FirstOrDefault();

            if (disk != null && (peek == null || disk.Size <= peek.Size))
            {
                toPeg.Push(disk);

                HanoiMove move = new HanoiMove(disk, fromPeg, toPeg);
                Moves.Add(move);
            }
        }
コード例 #2
0
 public virtual void MoveDisks(int diskNumbers, HanoiPeg fromPeg, HanoiPeg toPeg, HanoiPeg viaPeg)
 {
     if (diskNumbers == 1)
     {
         MoveOne(fromPeg, toPeg);
     }
     else // recursive moves
     {
         MoveDisks(diskNumbers - 1, fromPeg, viaPeg, toPeg);
         MoveOne(fromPeg, toPeg);
         MoveDisks(diskNumbers - 1, viaPeg, toPeg, fromPeg);
     }
 }
コード例 #3
0
        public HanoiTower(int diskNumbers, int pegNumbers = MIN_PEGS)
        {
            if (diskNumbers >= MIN_SIZE && diskNumbers <= MAX_SIZE)
            {
                _diskNumbers = diskNumbers;
            }
            if (pegNumbers >= MIN_PEGS && pegNumbers <= MAX_PEGS)
            {
                _pegNumbers = pegNumbers;
            }
            _pegs = new HanoiPeg[_pegNumbers];

            for (int i = 0; i < _pegNumbers; i++)
            {
                _pegs[i] = new HanoiPeg(i);
            }

            Moves = new List <HanoiMove>();
            Reset();
        }
コード例 #4
0
 public HanoiMove(HanoiDisk disk, HanoiPeg source, HanoiPeg target)
 {
     _disk      = disk;
     _sourcePeg = source;
     _targetPeg = target;
 }