程序:Hanoi塔问题
解题方法讨论:
总结:将要移动的盘分为2组,最下盘和其他盘。先将其他盘移动到辅助桩,再将最下盘移动到目标桩,最后将其他盘移动到目标桩。
假设n=3,看看这个解决过程:
一般而言,看看这个解决过程:
编程实现:
#include<iostream>
using namespace std;
void move(int n,char from,char to) //将第n个盘从from桩移动到to桩
{
cout<<n<<"号盘从"<<from<<"移动到"<<to<<endl;
}
void hanoi(int n,char a,char b,char c) //将n个盘从a桩移动到c桩(b是辅助桩)
{
if(n==1){
move(n,a,c);
}else{
hanoi(n-1,a,c,b);
move(n,a,c);
hanoi(n-1,b,a,c);
}
}
int main()
{
int n;
cout<<"请输入圆盘个数:"<<endl;
cin>>n;
hanoi(n,'A','B','C');
return 0;
}