#include <bits/stdc++.h>
using namespace std;
int n, cnt;
//将p1号 ~ p2号盘子从z1号柱子移动到z2号柱子,在此过程中z3号柱子是空闲的
void f(int p1, int p2, int z1, int z2, int z3)
{
if(p1 > p2) return;
//超级操作,将p1号 ~ p2-1号盘子从z1号柱子移动到z3号柱子,在此过程中z2号柱子是空闲的
f(p1, p2 - 1, z1, z3, z2);
//微操作,直接将p2号盘子从z1号柱子移动到z2号柱子上,并将移动次数加1
printf("将%d号盘子从%d号柱子移动到%d号柱子\n", p2, z1, z2);
cnt ++;
//超级操作,将p1号 ~ p2-1号盘子从z3号柱子移动到z2号柱子,在此过程中z1号柱子是空闲的
f(p1, p2 - 1, z3, z2, z1);
}
int main()
{
cin >> n;
//将1号 ~ n号盘子从1号柱子移动到3号柱子,在此过程中2号柱子是空闲的
f(1, n, 1, 3, 2);
printf("有%d个盘子时,移动次数为%d次\n", n, cnt);
return 0;
}
汉诺塔代码实现
最新推荐文章于 2024-07-07 12:10:24 发布