Algoritmo - Problema da Torre de Hanói

Dica: Depois que o artigo for escrito, o sumário pode ser gerado automaticamente. Como gerá-lo pode consultar o documento de ajuda à direita



提示:以下是本篇文章正文内容,下面案例可供参考

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.

Acho que você gosta

Origin blog.csdn.net/lianghuajunone/article/details/123421284
Recomendado
Clasificación