C语言汉诺塔问题代码
时间: 2023-11-12 19:57:05 浏览: 184
以下是C语言中解决汉诺塔问题的代码:
```c
#include <stdio.h>
void hanoi(int n, char A, char B, char C) {
if (n == 1) {
printf("Move disk 1 from %c to %c\n", A, C);
return;
}
hanoi(n-1, A, C, B);
printf("Move disk %d from %c to %c\n", n, A, C);
hanoi(n-1, B, A, C);
}
int main() {
int n;
printf("Enter the number of disks: ");
scanf("%d", &n);
hanoi(n, 'A', 'B', 'C');
return 0;
}
```
相关问题
C语言汉诺塔代码模板
以下是C语言汉诺塔代码模板:
```c
#include <stdio.h>
void hanoi(int n, char A, char B, char C) {
if (n == 1) {
printf("%c -> %c\n", A, C);
return;
}
hanoi(n - 1, A, C, B);
printf("%c -> %c\n", A, C);
hanoi(n - 1, B, A, C);
int main() {
int n;
printf("请输入汉诺塔的层数:");
scanf("%d", &n);
printf("移动步骤如下:\n");
hanoi(n, 'A', 'B', 'C');
return 0;
}
```
C语言汉诺塔代码非递归
好的,以下是C语言汉诺塔问题的非递归代码:
```c
#include <stdio.h>
int main()
{
int n, i, x, y, z, count = 0;
int stack[100], top = -1;
printf("请输入盘数:");
scanf("%d", &n);
// 把第一次需要移动的数据压入栈中
stack[++top] = n;
stack[++top] = 1;
stack[++top] = 3;
while (top > -1) {
z = stack[top--];
x = stack[top--];
y = stack[top--];
if (x == y) {
printf("第 %d 步: 把盘子 %d 从 %d 号柱移动到 %d 号柱\n", ++count, z, x, y);
} else {
// 把盘子压入栈中
stack[++top] = z;
stack[++top] = x;
stack[++top] = y;
// 计算出第三个柱子的编号
int temp = 6 - x - y;
// 把需要移动的数据压入栈中
stack[++top] = z - 1;
stack[++top] = temp;
stack[++top] = y;
// 把需要移动的数据压入栈中
stack[++top] = 1;
stack[++top] = x;
stack[++top] = y;
// 把需要移动的数据压入栈中
stack[++top] = z - 1;
stack[++top] = x;
stack[++top] = temp;
}
}
return 0;
}
```
希望能够帮到您!
阅读全文