这个汉洛塔递归问题该如何用C语音解决?
问题描述:
问题遇到的现象和发生背景
这个的大概思路我已经了解,但是用c写不出来
主要是对c的字符串有点不是很了解
我的解答思路和尝试过的方法
分为两类
1.a盘上只有一个盘(终止条件)
将a盘上的移到c盘
2.a盘上不止一个
(1)将a盘上的n-1个盘通过c盘移到b盘
(2)同1
(3)将b盘上的n-1个盘通过a盘移到c盘
我想要达到的结果
所要求的效果我达不到,求指点
答
知道堆吗?
答
#include <stdio.h>
// 将 n 个盘子从 x 借助 y 移动到 z
void move(int n, char x, char y, char z)
{
if( 1 == n )
{
printf("%c-->%c\n", x, z);
}
else
{
move(n-1, x, z, y); // 将 n-1 个盘子从 x 借助 z 移到 y 上
printf("%c-->%c\n", x, z); // 将 第 n 个盘子从 x 移到 z 上
move(n-1, y, x, z); // 将 n-1 个盘子从 y 借助 x 移到 z 上
}
}
int main()
{
int n;
printf("请输入汉诺塔的层数: ");
scanf("%d", &n);
printf("移动的步骤如下: \n");
move(n, 'X', 'Y', 'Z');
return 0;
}
答
n代表第几个盘子
start,goal,temp都是指柱子,表示从柱子start,借助柱子temp,移动盘子到柱子goal
one,two,three是存放每个柱子的当前盘子的
hanota(int n, int start, int goal, int temp
, Stack* one, Stack* two, Stack* three){