N 个圆盘按照半径从小到大依次迭放在一个柱子上(小的在上面, 1 1 号柱子)。 现在要求将 � N 个盘子从 1 1 号柱移到 3 3 号柱上,提供 2 2 号柱子作为临时柱,每次只允许移一个盘子,整个过程不允许大盘在小盘上面。
时间: 2024-01-22 07:20:17 浏览: 115
这是一个经典的递归问题,可以使用递归算法来解决。具体算法如下:
1. 如果只有一个盘子,直接移动到目标柱子上。
2. 如果有多个盘子,先将上面的 n-1 个盘子从 1 号柱移到 2 号柱(借助 3 号柱),然后将第 n 个盘子从 1 号柱移到 3 号柱,最后将上面的 n-1 个盘子从 2 号柱移到 3 号柱(借助 1 号柱)。
具体的代码实现如下:
```
void move(int n, int from, int to, int temp) {
if (n == 1) {
cout << "Move disk " << n << " from " << from << " to " << to << endl;
return;
}
move(n-1, from, temp, to);
cout << "Move disk " << n << " from " << from << " to " << to << endl;
move(n-1, temp, to, from);
}
```
其中,n 表示盘子的个数,from 表示起始柱子编号,to 表示目标柱子编号,temp 表示临时柱子编号。
比如,如果有 3 个盘子,起始柱子编号为 1,目标柱子编号为 3,临时柱子编号为 2,调用 `move(3, 1, 3, 2)` 即可完成移动。
阅读全文