汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。
大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘
//层次分析: A->B A->C B->C A:1 2 -> C: 1 2;
#include<iostream>
using namespace std;
int times = 0;
void move(char src, char dst)
{
times++; //移动次数
cout << times << ": " << src << "--->" << dst << endl;
}
void hanNuoTower(int n, char first, char mid, char last) //n:盘子个数 first:第一个正存着盘子 mid:用来转移盘子 last:最终存放盘子
{
if (1 == n) //递归出口不可忘
move(first, last);
else
{
hanNuoTower(n - 1, first, last, mid);
move(first, last);
hanNuoTower(n - 1, mid, first, last);
}
}
int main()
{
int n = 4;
hanNuoTower(n, 'A', 'B', 'C');
return 0;
}
//1 : A--->C
//2 : A--->B
//3 : C--->B
//4 : A--->C
//5 : B--->A
//6 : B--->C
//7 : A--->C
//1: A--->B
//2 : A--->C
//3 : B--->C
//4 : A--->B
//5 : C--->A
//6 : C--->B
//7 : A--->B
//8 : A--->C
//9 : B--->C
//10 : B--->A
//11 : C--->A
//12 : B--->C
//13 : A--->B
//14 : A--->C
//15 : B--->C