using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace StackedHanoi { class Program { static void Main(string[] args) { Console.WriteLine("Torens van Hanoi"); Console.Write("Aantal stenen: "); int n = Int32.Parse(Console.ReadLine().Split()[0]); Stack S = new Stack(); int ms = 1; S.Push(new HanoiTask('A', 'C', n)); while (S.Count > 0) { HanoiTask cur = S.Pop(); if (cur.aantal == 1) Console.WriteLine("Schuif schijf van {0} naar {1}", cur.van, cur.naar); else if (cur.aantal > 1) { char tussen = derde(cur.van, cur.naar); S.Push(new HanoiTask(tussen, cur.naar, cur.aantal - 1)); S.Push(new HanoiTask(cur.van, cur.naar, 1)); S.Push(new HanoiTask(cur.van, tussen, cur.aantal - 1)); if (S.Count > ms) ms = S.Count; } } Console.WriteLine("De maximale Stack-hoogte was {0}.", ms); Console.ReadKey(); } static char derde(char v, char n) { switch (v) { case 'A': return (n == 'B' ? 'C' : 'B'); case 'B': return (n == 'C' ? 'A' : 'C'); case 'C': return (n == 'A' ? 'B' : 'A'); } return 's'; } } class HanoiTask { public char van, naar; public int aantal; public HanoiTask(char v, char n, int a) { van = v; naar = n; aantal = a; } } }