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)
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)
}
}