首先考虑问题
要将盘子从A移动到C可以分成三步
1.将N-1号盘子移动到中转柱B上
2.将N号盘子移送到C上
3.将N-1号盘子从B放到C
完成步骤2后需要进行下面操作,现在N-1号盘子相当于N,中转柱变成了A
1.N-1(相当于N-2)号盘子从B移动到中转柱A
2.N号盘子移动到C
3.将N-1号盘子移动到C
.
.
.
之后的操作也是重复这两个过程
在以上过程中边的都是中转站,所以编写了以下代码
void hnmove(int n,char f,char t){
static int i=0;
printf("第%d步:移动%d号盘子,%c——>%c\n",++i,n,f,t);
}
//n是当前盘子,a是需要移动的柱子,b是中转站,c是接收的柱子
void hannuo(int n,char a,char b,char c){
if (n==1) {
hnmove(n, a, c);
}else{
hannuo(n-1, a, c, b);//移动N-1
hnmove(n, a, c);//移动N
hannuo(n-1, b, a, c);//移动N-2
}
}
主函数调用
int main(int argc, const char * argv[]) {
void hannuo(int n,char a,char b,char c);
int n=1;
char a='A',b='B',c='C';
printf("请输入汉诺塔层数");
cin>>n;
hannuo(n, a, b, c);
}
这个问题主要就是掌握要吧N移到目标柱,就要吧N-1先移到中转柱
以上