C# :: Aufgabe #66

3 Lösungen Lösungen öffentlich

Türme von Hanoi - Lösung

Fortgeschrittener - C# von bibir - 05.09.2014 um 11:28 Uhr
Programmiere die Lösung der Türme von Hanoi.
Dabei ist es Ausreichend, die zu tätigenden Schritte textuell auszugeben

Lösungen:

vote_ok
von Gisbert5020 (3120 Punkte) - 07.09.2014 um 17:26 Uhr
Quellcode ausblenden C#-Code
using System;

namespace Türme_von_Hanoi
{
    class Program
    {
        static void Main(string[] args)
        {
            int zuege = 0;
            Console.WriteLine("Geben Sie die Anzahl der Scheiben ein:");
            int scheibe = int.Parse(Console.ReadLine());
            zuege = anstoß(scheibe, 'A', 'B', 'C', zuege);
            Console.Write("Es sind mindestens {0} Züge notwendig.", zuege);
            Console.ReadLine();
        }
        static int bewege(int scheibe, char a, char b, int z)
        {
            Console.WriteLine("Bwege Scheibe {0} von {1} zu {2}", scheibe, a, b);
            return z += 1;
        }
        static int anstoß(int scheibe, char a, char b, char c, int z)
        {
            if (scheibe == 1)
            {
                return bewege(1,a,b,z);
            }
            else
            {
                z = anstoß(scheibe - 1, a, c, b, z);
                z = bewege(scheibe, a, b, z);
                z = anstoß(scheibe - 1, c, b, a, z);
                return z;
            }
        } 
    }
}

1x
vote_ok
von pocki (4190 Punkte) - 07.09.2014 um 17:32 Uhr
Quellcode ausblenden C#-Code
void Main()
{
	setzeTurm(5,"Start", "Ziel", "Hilfs");
}

private static void setzeTurm(int n, string startPlatzName, string zielPlatzName, string hilfsPlatzname)
{
	if (n > 0)
	{
		setzeTurm(n-1, startPlatzName, hilfsPlatzname, zielPlatzName);
		System.Console.WriteLine(string.Format("Bewege Scheibe {0} vom {1}-Platz zum {2}-Platz.", n, startPlatzName, zielPlatzName));
		setzeTurm(n-1, hilfsPlatzname, zielPlatzName, startPlatzName);
	}
}
vote_ok
von Mexx (2370 Punkte) - 19.09.2014 um 15:51 Uhr
Hier mit rekursiv aufgerufener Move-Funktion. Die Türme wurden durch drei Stacks simuliert.

Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Türme_von_Hanoi
{
    class Program
    {
        static void Main(string[] args)
        {
            Stack<int> turmA = new Stack<int>(7);
            Stack<int> turmB = new Stack<int>(7);
            Stack<int> turmC = new Stack<int>(7);

            // TurmA initialisieren (mit Scheiben bestücken, wobei 6 die grösste und 0 die kleinste darstellt)
            for (int i = 6; i >= 0; i--)
            {
                turmA.Push(i);
            }

            MoveDisk(7, ref turmA, ref turmB, ref turmC);
        }

        static void MoveDisk(int disk, ref Stack<int> a, ref Stack<int> b, ref Stack<int> c)
        {
            if (disk > 0)
            {
                MoveDisk(disk - 1, ref a, ref c, ref b);
                c.Push(a.Pop());
                MoveDisk(disk - 1, ref b, ref a, ref c);
            }
        }
    }
}
2101625

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.