Super detaillierte Erklärung des Turm-von-Hanoi-Problems

Problem mit dem Turm von Hanoi

Fügen Sie hier eine Bildbeschreibung ein
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.
Fügen Sie hier eine Bildbeschreibung ein
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.

おすすめ

転載: blog.csdn.net/Djsnxbjans/article/details/125997823