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); } }
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); } }
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(); }
public HanoiMove(HanoiDisk disk, HanoiPeg source, HanoiPeg target) { _disk = disk; _sourcePeg = source; _targetPeg = target; }