汉诺塔(tower of hanoi)有三个木桩,有数量大小不同的盘子,每个木桩放置要求:
1.直径达的盘子永远只能放在直径小的下面
2.每次只能移动一个盘子
1----->2
1----->3
2----->3
n-1---->2
n----->3
n-1----->3
hanoi(n-1, p1, p3, p2);
将n-1个盘子从p1绕过p3移到p2
换而言之,就是将p3当作辅助盘,将n-1个盘从p1移到p2
hanoi(n-1, p2, p1, p3);
将n-1个盘子从p2绕过p1移到p3
换而言之,就是将p1当作辅助盘,将第n个盘从p2移到p3
假如有三个盘子
将两个小盘子看作n-1 从p1移到p2,借助p3的辅助
1---->3
1---->2
3---->2
将第n个盘子从p1移到p3
1---->3
将n-1 个盘子从p2移到p3,借助p1的辅助
2---->1
2---->3
1---->3
hanoi(int n,int p1,int p2,int p3 )
{
if(n==1)
cout<<"盘子从"<<p1<<" to "<<p3<<endl;
else
{ hanoi(n-1, p1, p3, p2);//找到第一个盘子
cout<<"盘子从 "<<p1<<" 移到 "<<p3<<endl;
hanoi(n-1, p2, p1, p3);
}
}
int main()
{
hanoi(3,1,2,3);
return 0;
}