Seja diligente e encoraje os anos a não esperar por ninguém
Desenvolvimento de jogos C/C++
Olá, aqui é Junxi_, hoje vou atualizar um blog que sempre quis atualizar, mas não tenho tempo para escrever - o problema da Torre de Hanoi. Entre todos os problemas relacionados à recursão, o problema da Torre de Hanoi é um dos problemas mais clássicos. Pode-se dizer que se você realmente entender o núcleo do problema da Torre de Hanoi, sua recursão não será tão ruim. Hoje vou mostrar o problema da Torre de Hanoi de uma maneira simples.
Explique a Torre de Hanoi de forma simples
O que é a Torre de Hanói?
- A Torre de Hanói originou-se de um jogo nas antigas lendas indianas. 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. Brahma ordenou que Brahmin reorganizasse os discos em outro pilar em ordem de tamanho a partir de baixo. E é estipulado que o disco não pode ser ampliado no disco pequeno, e apenas um disco pode ser movido entre os três pilares por vez ao se mover.
A linguagem C realiza a Torre de Hanói
Solução específica para a análise do trem de pensamento do problema de Hanói
-
Da descrição acima do problema da Torre de Hanoi, podemos tirar tal conclusão
-
Se você quiser mover todas as placas da coluna A para a coluna C, siga as seguintes regras:
-
1. Apenas uma placa na parte superior do pilar A pode ser movida por vez
-
2. A placa não pode ser ampliada na placa pequena.
Vamos analisar passo a passo. Primeiro, suponha que existam n placas em A. Nosso objetivo agora é mover todas as placas de A para a coluna C com a ajuda da coluna B.
Quando n = 2 placas precisam ser movidas em A
- Isso é tão simples que não vou fazer um desenho!
- Precisamos apenas mover a placa superior de A para B, depois mover a outra placa de A para C e, finalmente, mover a placa de B para C.
Quando n = 3 placas precisam ser movidas em A
- Mova 2 pratos de A para B. Repita os passos quando n=2, desta vez para mover essas 2 placas de A para B com a ajuda de C
- Em seguida, mova o disco em A para C
- Mova as 2 placas de B para C. Repita as etapas quando n = 2, desta vez para mover essas 2 placas de B para C com A
Quando n = 4 placas precisam ser movidas em A
-
Mova 3 pratos de A para B. Repita os passos quando n=3, a diferença de n=3 é que usamos C para mover a placa de A para B
-
Mova a última placa em A para C
-
Mova as 3 placas de B para C. Repita os passos quando n=3, a diferença de n=3 é que usamos A para mover a placa de B para C
Quando o número de pratos a serem movidos em A é n
- Que tal, você encontrou o padrão após a explicação acima?
- Ou seja, para qualquer inteiro positivo n maior que 1, se houver um problema de torre de Hanói de n camadas, podemos decompô-lo em dois problemas de torre de Hanói de n-1 camadas para resolver
Código para implementar o problema da Torre de Hanoi
-
Através de nossa análise acima, podemos considerar este problema como estas três etapas:
-
1. Mova a placa de camada n-1 em A para B através de C
-
2. Mova os discos restantes em A para C neste momento
-
3. Mova a placa na camada n-1 em B para C através de A
- O código de referência é o seguinte:
#include<stdio.h>
void Move (char A, char C, int n)
{
printf("把第%d个盘子从%c--->%c\n", n, A, C);
}
void HanoiTower(char A, char B, char C, int n)
{
if (n == 1)
{
Move(A, C, n);
}
else
{
//将n-1个盘子从A柱借助于C柱移动到B柱上
HanoiTower(A, C, B, n - 1);
//将A柱最后一个盘子移动到C柱上
Move(A, C, n);
//将n-1个盘子从B柱借助于A柱移动到C柱上
HanoiTower(B, A, C, n - 1);
}
}
int main()
{
int n = 0;
printf("输入A柱子上的盘子个数:");
scanf("%d", &n);
//将n个盘子从A柱借助于B柱移动到C柱上
HanoiTower('A', 'B', 'C', n);
return 0;
}
Resumir
-
Por enquanto, o conteúdo de hoje termina aqui. Resolvemos o problema da Torre de Hanói de forma recursiva hoje. Se você ainda tiver dúvidas, você deve tentar, caso contrário, é muito fácil de esquecer e muito difícil de entender só de olhar, temos que praticar repetidamente para nos familiarizarmos!
-
Bem, se tiverem alguma dúvida, perguntem-me na área de comentários ou mensagem privada, até à próxima!
Não é fácil para um novo blogueiro criar. Se você acha que o conteúdo do artigo é útil para você, clique neste novo blogueiro antes de sair. Seu apoio é minha motivação para atualizar! ! !
**(Ke Li pede para você apoiar o blogueiro três vezes seguidas!!! Clique no comentário abaixo para curtir e coletar para ajudar Ke Li)**