-
问题描述
-
假设有三个柱子A.B.C,N个盘子
-
每次只允许移动一个盘子
-
必须保证小盘子在大盘子之上
-
如何把所有盘子从A移到C?
-
-
理解过程(转化为递归问题)
-
用C柱做过渡,将A柱上的n-1的盘子移到B上
-
从A柱上最下面的盘子直接移到C柱上
-
用A柱做过渡,将B柱上的n-1个盘子移到C上
-
-
算法实现
#include "iostream"
using namespace std;
void move(int x,char a,char b)
{
cout<<x<<"从"<<a<<"移到"<<b<<" ";
}
void hanoi(int n,char x,char y,char z)
{
if(n==1) move(n,x,z);
else
{
hanoi(n-1,x,z,y);
move(n,x,z);
hanoi(n-1,y,x,z);
}
}
int main(void)
{
int n;
cin>>n;
hanoi(n,'A','B','C');
return 0;
} -