汉诺塔问题。有三根柱子A、B、C。设A柱上有n个盘子,盘子的大小不等,大的盘子在下,小的盘子在上,如下图所示。要求将A柱上的n个盘子移到C上,每一次只能移一个盘子。在移动过程中,可以借助于任一根柱子,但必须保证三根柱子上的盘子都是大的盘子在下,小的盘子在上。要求编一个程序打印出移动盘子的步骤。
#include<iostream> using namespace std; void move(char x,char y){ cout<<x<<"->"<<y<<endl; } void hanoi(int n,char A,char B,char C){ if(n == 1) move(A,C); else{ hanoi(n-1,A,C,B);//以C为平台,把A上面n-1个搬到B move(A,C);//再把A最上一个(从底下数第n(指函数里的n)个)放以在C柱上 hanoi(n-1,B,A,C);// 以A为平台,把B上那n-1个搬到C } /*不要想太复杂,这里的ABC在传来传去中,指代确实有改变,
但从第n个盘的移动考虑就可,把上面n-1做整体 */ } int main(){ int num; cout<<"请输入A柱盘数:"; cin>>num; hanoi(num,'A','B','C') ; return 0; }