汉诺游戏规则如下:
1、有三根相邻的柱子,标号为A,B,C。
2、A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘。
3、需要把所有盘子移动到柱子C上,,每次只能移动一个盘子,并且大的盘子只能放在小的下面。
(典型的递归问题)
先上一个只有三个盘子时的动态图:
C语言算法:
#include <stdio.h>
void hanoi(int n, char A, char B, char C)
{
if(n == 1)//只有一个盘子的情况,比较简单
{
printf("%c-%c\n", A, C);
}
else
{
hanoi(n - 1, A, C, B);//将上面的(n-1)个盘子看成一个整体
printf("%c-%c\n", A, C);
hanoi(n - 1, B, A, C);
}
}
int main ()
{
int n;//盘子的数量
char A,B,C;//分别表示三个柱子
scanf("%d",&n);
hanoi(n, 'A', 'B', 'C');
return 0;
}
C++算法:
#include <iostream>
using namespace std;
void hanoi(int n, char A, char B, char C)
{
if(n == 1)
{
cout<<A<<'-'<<C;
cout<<endl;
}
else
{
hanoi(n - 1, A, C, B);
cout<<A<<'-'<<C<<endl;
hanoi(n - 1, B, A, C);
}
}
int main ()
{
int n;
char A,B,C;
cin>>n;
hanoi(n, 'A', 'B', 'C');
return 0;
}