Algoritmo: problema de la Torre de Hanoi

Sugerencia: después de escribir el artículo, la tabla de contenido se puede generar automáticamente. Cómo generarla puede consultar el documento de ayuda a la derecha



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

1. El problema de la Torre de Hanoi

La Torre de Hanoi tiene su origen en una antigua leyenda de la India. Brahma, el "Dios de la creación" del hinduismo, hizo tres pilares de diamantes cuando creó el mundo. En uno de los pilares, se apilaron 64 discos de oro en orden ascendente. Brahma ordenó a un discípulo llamado Brahman que moviera todos los discos a otro pilar.Se deben observar las siguientes reglas durante el proceso de movimiento: solo se puede
mover un disco en la parte superior del pilar a la vez,
en el disco grande;

Mover n discos requiere al menos 2n-1 operaciones

Dos, el código

1. Pseudocódigo

El código es el siguiente (ejemplo):

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

lenguaje 2.c

Algo así como una dicotomía.
El siguiente es el pseudocódigo del algoritmo divide y vencerás para encontrar el valor máximo en la matriz:

#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;
}

Los datos solicitados por la red url utilizada aquí.


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 se mueve a B
7ª vez: se mueve de A a B

Resumir

Para el problema de la Torre de Hanoi con n discos, el proceso de mover los discos es:
mover los n-1 discos de la columna de inicio a la columna auxiliar;
mover el 1 disco restante de la columna de inicio al objetivo de la columna;
mover todos los discos de la columna auxiliar a la columna de destino.

Supongo que te gusta

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