目录
汉诺塔问题:
给定三根柱子,记为 A,B,C .其中A柱子上有64个盘子,上面的盘子比下面的盘子小。将A柱上的盘子经由B柱移动到C柱最少需要多少次?
移动时应注意:1、 一次只能移动一个盘子
2 、大的盘子不能压在小盘子上
解决思路:
1、将 A 座上 n-1 个盘子移到 B 座上
2、将 A 座上剩下的 1 个盘子移到 C 座上
3、将 B 座上 n-1 个盘子移到 C 座上
编程实现:
#include <iostream>
#include <cstdio>
#include <string.h>
#include <math.h>>
using namespace std;
void Hanoi(int n,char First,char Second,char Third)
{
if(n==1)
{
cout<<First<<"->"<<Third<<endl;
return ;
}
else
{
Hanoi(n-1,First,Third,Second); //将 A 座上 n-1 个盘子移到 B 座上
cout<<First<<"->"<<Third<<endl;//将 A 座上剩下的 1 个盘子移到 C 座上
Hanoi(n-1,Second,First,Third);//将 B 座上 n-1 个盘子移到 C 座上
return ;
}
}
int main()
{
int n;
cout<<"请输入A柱上盘子的数量:";
cin>>n;
cout<<"一共需要"<<(pow(2,n))-1<<"步"<<endl;
Hanoi(n,'A','B','C');
return 0;
}
编译结果: