מגדלי האנוי
יש לכתוב קוד פתירת בעית Tower of Hanoi.
יש 3 חוקים.
1. רק דיסק אחד ניתן להזיז באותו זמן
2. דיסק לא יכול להיות מעל דיסק קטן ממנו
3. דיסק ניתן להזיז רק מלמעלה.
p,rui
- class Program
- {
- static void Main(string[] args)
- {
- int n = 3;
- Tower[] towers = new Tower[n];
- for(int i=0; i<3; i++)
- {
- towers[i] = new Tower(i);
- }
- for (int i=n-1; i>=0; i--)
- {
- towers[0].add(i);
- }
- towers[0].moveDisks(n, towers[2], towers[1]);
- }
- }
- public class Tower
- {
- private Stack<int> disks;
- public int Index { get; private set; }
- public Tower(int i)
- {
- disks = new Stack<int>();
- this.Index = i;
- }
- public void add(int d)
- {
- if (disks.Count > 0 && disks.Peek() <= d)
- Console.WriteLine($"Error placing disk {d}");
- else
- disks.Push(d);
- }
- public void moveTopTo(Tower t)
- {
- int top = disks.Pop();
- t.add(top);
- }
- public void moveDisks(int n, Tower destination, Tower buffer)
- {
- if(n>0)
- {
- moveDisks(n - 1, buffer, destination);
- moveTopTo(destination);
- buffer.moveDisks(n - 1, destination, this);
- }
- }
- }