汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘,如图所示:
现在请试着编写一个程序,对于一个有n个盘子的汉诺塔,列举将这n个盘子从柱子A移动到柱子C需要的所有移动步骤,每个步骤占一行。
输入:
3
输出:
A-->C
A-->B
C-->B
A-->C
B-->A
B-->C
A-->C
1 #include "stdafx.h" 2 #include <iostream> 3 using namespace std; 4 5 void move(char src, char dest) 6 { 7 cout << src << "-->" << dest << endl; 8 } 9 10 //把n个盘子从src针移动到dest针,以medium为中介 11 void hanoi(int n, char src, char medium, char dest) 12 { 13 if (n == 1) 14 move(src, dest); //当盘子个数为1时候,直接从A移动到C 15 else 16 //把问题简单化, 17 //1.首先把A上的n-1个盘子移动到B 18 //2.把A的剩下的一个盘子移动到C 19 //3.把B上的n-1个盘子移动到C 20 { 21 hanoi(n - 1, src, dest, medium); //1.首先把A上的n-1个盘子移动到B 22 move(src, dest); //2.把A的剩下的一个盘子移动到C 23 hanoi(n - 1, medium, src, dest); //3.把B上的n-1个盘子移动到C 24 } 25 } 26 27 int main() 28 { 29 int m; 30 cout << "Enter the number of diskes:"; 31 cin >> m; 32 cout << "the step to moving:\t" << m << " diskes:" << endl; 33 hanoi(m, 'A', 'B', 'C'); 34 return 0; 35 }