Turm von Hanoi
Problem mit dem Turm von Hanoi
1. Zur Vereinfachung der späteren Erklärung erstellen wir zunächst eine einfache Benennung – Startspalte: 1; Übergangsspalte: 2; Zielwohnsitz: 3; 2.
Da das Problem des Turms von Hanoi ein offensichtliches rekursives Problem ist, verwenden wir rekursive Gedanken dazu löse es.
3. Wir können uns n Platten als zwei Teile vorstellen: die n-te Platte und die ersten n-1 Platten. Um diese n Platten von Spalte 1 nach Spalte 3 zu verschieben, müssen Sie zuerst die ersten n-1 Platten nach Spalte 2 und dann die n-te Platte von Spalte 1 nach Spalte 3 verschieben. (Hinweis: Wir behandeln hier die ersten n-1 Platten als Ganzes.)
Illustration
Nehmen wir als illustriertes Beispiel drei Teller.
Hinweis: 1 mal 2 bis 3: Der Startbalken ist Takt 1, der durch Takt 2 verläuft und zum Ziel von Takt 3 führt.
Code
Im Folgenden verwenden wir Code, um diesen Prozess zu implementieren.
Zeigen Sie unten einige davon 内联代码片
.
// void Hanoi(int n, int a, int b, int c)
{
static int flag = 0;
if (n > 1)
{
Hanoi(n - 1, a, c, b);
printf("第%d次:%d to %d\n",++flag, a, c);
Hanoi(n - 1, b, a, c);
}
else
printf("第%d次:%d to %d\n",++flag, a, c);
}
int main()
{
int n = 0;
int a = 0;
int b = 0;
int c = 0;
printf("几个盘子 起始柱 过度柱 目标住\n");
scanf("%d %d %d %d", &n,&a,&b,&c);
Hanoi(n, a, b, c);
return 0;
}
Es ist nicht einfach, es zu machen. Wenn es für Sie hilfreich ist, geben Sie ihm bitte ein „Gefällt mir“ und hinterlassen Sie Ihre Aufmerksamkeit.