汉诺塔问题
移动规则:
每次只能移动一个圆盘;
圆盘可以插在A、 B和C中的任何一个塔座上;
任何时刻都不能将一个较大的圆盘压在较小的圆盘之上。
假设盘的序号从上往下增大,第一个盘序号为1,最后一个盘序号为n。每次只能移动一个盘,并且大盘不能在小盘的上面。那么运用递归的思想可知,若想将n号盘放到z轴上,那么必须先将(1,…,n-1)号盘移动到y轴上,此时z轴作为辅助轴。即
hanoi(n-1,x,z,y);
然后移动n号盘到z轴上,即
move(x,n,z);
最后将y轴上的(1,…,n-1)号盘移动到z轴上,此时x轴作为辅助轴。即
hanoi(n-1,y,x,z);
#include <iostream>
using namespace std;
void move(char from,char to){
cout<<"Move"<<from<<"to"<<to<<endl;
}
void hanoi(int n,char first,char second,char third){
if(n==1)
move(first,third);
else{
hanoi(n-1,first,third,second);
move(first,third);
hanoi(n-1,second,first,third);
}
}
int main()
{
int m;
cout<<"the number of diskes:";
cin>>m;
cout<<"move "<<m<<" diskes:\n";
hanoi(m,'A','B','C');
}