[Diário de algoritmo] Realização recursiva da Torre de Hanói

Descrição do problema : A
Torre de Hanói: A Torre de Hanói (também conhecida como Torre de Hanói) é um brinquedo educacional derivado de uma antiga lenda da Índia. Quando Brahma criou o mundo, ele fez três pilares de diamante.Em um pilar, 64 discos de ouro foram empilhados em ordem de tamanho de baixo para cima. O Brahma ordenou que o Brahmin recolocasse o disco em outro pilar em ordem de tamanho de baixo. Também estipula que o disco não pode ser ampliado no disco pequeno, e apenas um disco pode ser movido de cada vez entre os três pilares. (Isto é: a placa pequena deve estar em cima da placa grande, e apenas uma placa pode ser movida por vez. Finalmente, todas as placas acima de A são movidas para C)
Insira a descrição da imagem aqui

Pensei : Supondo que agora haja duas placas, você pode mover diretamente a placa pequena de A para B, depois mover a placa grande de A para C e, finalmente, mover a placa pequena de B para C. Na verdade, 64 pratos são iguais. Você pode pensar nas 63 placas superiores como um todo, primeiro mova as 63 placas de A para B, depois mova a placa inferior de A para C e, em seguida, mova as 63 placas de B para C. Como mover as 63 placas? Considere os 62 acima como um todo. . . Por analogia, é na verdade recursão, até o caso mais simples.

#include <cassert>
using namespace std;
#define length 3
#include<iostream>
using namespace std;
int main()
{
	void hanoi(int n, char one, char two, char three);
	int m;
	cout << "输入盘子数:";
	cin >> m;;
	hanoi(m, 'A', 'B', 'C');
}


void hanoi(int n, char one, char two, char three)
{
	void move(char x, char y);
	if (n == 1)
	{
		move(one, three);//递归结束条件。此时只有一个盘子
	}
	else
	{
		hanoi(n - 1, one, three, two);//将上面n-1个盘子从A移动到B,(可以借助C)
		move(one, three);//输出
		hanoi(n - 1, two, one, three);将上面n-1个盘子从B移动到C(借助A)
	}
}

Acho que você gosta

Origin blog.csdn.net/wdxyxshark/article/details/108713359
Recomendado
Clasificación