python汉诺塔问题:有三根柱子 A.B,C。 A柱上有若千碟子,每次移动一块碟子,小的只能登在大的上面,把所有碟子从A柱全部移到C柱上。
时间: 2023-12-03 21:43:22 浏览: 148
好的,这是一个经典的递归问题,可以使用 Python 来实现。下面是实现汉诺塔问题的代码:
```python
def hanoi(n, a, b, c):
if n == 1:
print("{} -> {}".format(a, c))
else:
hanoi(n-1, a, c, b)
print("{} -> {}".format(a, c))
hanoi(n-1, b, a, c)
hanoi(3, 'A', 'B', 'C')
```
在上面的代码中,`n` 表示要移动的碟子数目,`a`、`b`、`c` 分别表示三个柱子。当只有一个碟子时,我们只需要将其从 `a` 移动到 `c` 即可;当有多个碟子时,我们需要先将 `n-1` 个碟子从 `a` 移动到 `b`,然后将最后一个碟子从 `a` 移动到 `c`,最后将 `n-1` 个碟子从 `b` 移动到 `c`。
你可以尝试将 `hanoi(3, 'A', 'B', 'C')` 中的 `3` 改为其他数值,看看结果会如何变化。
相关问题
用python解决汉诺塔问题:有三个柱子a,b,c。若a柱子上有若干碟子,每次移动一块碟子,小的只能叠在大的上面,把所有碟子从a移动到c柱子上
可以使用递归来解决汉诺塔问题,以下是示例代码:
```python
def hanoi(n, a, b, c):
if n > 0:
hanoi(n-1, a, c, b)
print("Move disk %d from %s to %s" % (n, a, c))
hanoi(n-1, b, a, c)
# 测试
hanoi(3, 'A', 'B', 'C')
```
输出结果为:
```
Move disk 1 from A to C
Move disk 2 from A to B
Move disk 1 from C to B
Move disk 3 from A to C
Move disk 1 from B to A
Move disk 2 from B to C
Move disk 1 from A to C
```
解释:
- `n` 表示当前移动的盘子数;
- `a`、`b`、`c` 分别表示三个柱子;
- 第一步递归调用 `hanoi(n-1, a, c, b)`,将 `n-1` 个盘子从 `a` 移动到 `b`;
- 第二步输出将第 `n` 个盘子从 `a` 移动到 `c`;
- 第三步递归调用 `hanoi(n-1, b, a, c)`,将 `n-1` 个盘子从 `b` 移动到 `c`。
定义函数解决汉诺塔问题:将A柱上的盘子通过B柱移动到C柱子,在main函数中输入汉诺塔盘子数n,输出移动路径。输出格式:"%c->%c " c语言代码
以下是C语言代码:
```c
#include <stdio.h>
void hanoi(int n, char A, char B, char C) {
if (n == 1) {
printf("%c->%c ", A, C);
} else {
hanoi(n - 1, A, C, B);
hanoi(1, A, B, C);
hanoi(n - 1, B, A, C);
}
}
int main() {
int n;
printf("请输入汉诺塔盘子数n:");
scanf("%d", &n);
printf("移动路径为:");
hanoi(n, 'A', 'B', 'C');
printf("\n");
return 0;
}
```
函数 `hanoi` 是递归实现汉诺塔问题的函数,参数 `n` 表示要移动的盘子数,参数 `A`、`B`、`C` 分别表示三个柱子。当 `n` 等于 1 时,直接将盘子从 A 柱移动到 C 柱;否则,先将 `n-1` 个盘子从 A 柱通过 C 柱移动到 B 柱,再将最后一个盘子从 A 柱移动到 C 柱,最后将 B 柱上的 `n-1` 个盘子通过 A 柱移动到 C 柱。主函数中先输入盘子数 `n`,然后调用 `hanoi` 函数输出移动路径。
阅读全文