汉诺塔来源于印度传说的一个故事,大梵天创造世界时作了三根金刚石柱子,在一根柱子上从上往下从小到大顺序摞着64片黄金圆盘。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一回只能移动一个圆盘,只能移动在最顶端的圆盘。
#include <iostream> using namespace std; //汉诺塔问题 //汉诺塔来源于印度传说的一个故事,大梵天创造世界时作了三根金刚石柱子, //在一根柱子上从上往下从小到大顺序摞着64片黄金圆盘。 //上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。 //并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一回只能移动一个圆盘, //只能移动在最顶端的圆盘。 //算法思想: //1.把A柱上的n-1个盘子移动到B柱上(借助C柱) //2.把A柱的最后一个盘子移动到C柱 //3.把B柱的n-1个盘子移动到C柱(借助A柱) int i = 1;//记录移动的步数 void move1(char A, char B)//移动一个盘子 { cout <<"第"<<i++<< "步移动:" << A << "-->" << "至" << B << endl; } void moven(int n, char A, char B, char C) //A柱上的n个盘子 -------------> C柱 { if (n == 1) { move1(A, C); } else { moven(n - 1, A, C, B);//A柱上的n-1个盘子 -------------> B柱 move1(A, C);//A柱上的最后一个盘子 -------------> C柱 moven(n - 1, B, A, C);//B柱上的n-1个盘子 -------------> C柱 } } int main() { int m; cout << "请输入初始圆盘数量:" << endl; cin >> m; cout << "移动顺序为:" << endl; moven(m, 'A', 'B', 'C'); cout <<"移动"<<m<<"片圆盘"<< "一共需要" << i-1 << "步操作完成移动" << endl; system("pause"); return 0; }转载自:黑凤梨の博客