Dica: Depois que o artigo for escrito, o sumário pode ser gerado automaticamente. Como gerá-lo pode consultar o documento de ajuda à direita
Diretório de artigos
提示:以下是本篇文章正文内容,下面案例可供参考
1. O Problema da Torre de Hanói
A Torre de Hanoi é originária de uma antiga lenda na Índia. Brahma, o "Deus da Criação" do hinduísmo, fez três pilares de diamante quando criou o mundo. Em um dos pilares, 64 discos de ouro foram empilhados em ordem crescente. Brahma ordenou a um discípulo chamado Brahman que movesse todos os discos para outro pilar.As seguintes regras devem ser observadas durante o processo de movimentação: apenas um disco no
topo do pilar pode ser movido por vez
Mover n discos requer pelo menos 2n-1 operações
Dois, o código
1. Pseudocódigo
O código é o seguinte (exemplo):
// num 表示移动圆盘的数量,source、target、auxiliary 分别表示起始柱、目标柱和辅助柱
hanoi(num , source , target , auxiliary):
if num == 1: // 如果圆盘数量仅有 1 个,则直接从起始柱移动到目标柱
print(从 source 移动到 target)
else:
// 递归调用 hanoi 函数,将 num-1 个圆盘从起始柱移动到辅助柱上,整个过程的实现可以借助目标柱
hanoi(num-1 , source , auxiliary , target)
// 将起始柱上剩余的最后一个大圆盘移动到目标柱上
print(从 source 移动到 target)
// 递归调用 hanoi 函数,将辅助柱上的 num-1 圆盘移动到目标柱上,整个过程的实现可以借助起始柱
hanoi(n-1 , auxiliary , target , source)
2.c idioma
Uma espécie de dicotomia.
A seguir está o pseudocódigo do algoritmo dividir e conquistar para encontrar o valor máximo no array:
#include <stdio.h>
void hanoi(int num, char sou, char tar,char aux) {
//统计移动次数
static int i = 1;
//如果圆盘数量仅有 1 个,则直接从起始柱移动到目标柱
if (num == 1) {
printf("第%d次:从 %c 移动至 %c\n", i, sou, tar);
i++;
}
else {
//递归调用 hanoi() 函数,将 num-1 个圆盘从起始柱移动到辅助柱上
hanoi(num - 1, sou, aux, tar);
//将起始柱上剩余的最后一个大圆盘移动到目标柱上
printf("第%d次:从 %c 移动至 %c\n", i, sou, tar);
i++;
//递归调用 hanoi() 函数,将辅助柱上的 num-1 圆盘移动到目标柱上
hanoi(num - 1, aux, tar, sou);
}
}
int main()
{
//以移动 3 个圆盘为例,起始柱、目标柱、辅助柱分别用 A、B、C 表示
hanoi(3, 'A', 'B', 'C');
return 0;
}
Os dados solicitados pela rede url usada aqui.
1ª vez: de A a B
2ª vez: de A a C
3ª vez: de B a C
4ª vez: de A a B
5ª vez: de C a A
6ª vez: de C passa para B
7ª vez: passa de A para B
Resumir
Para o problema da Torre de Hanoi com n discos, o processo de mover os discos é:
mover os n-1 discos na coluna inicial para a coluna auxiliar;
mover o 1 disco restante na coluna inicial para o objetivo na coluna;
mover todos os discos na coluna auxiliar para a coluna de destino.