我在尝试解决这个有趣的问题,但在实现过程中遇到了一些麻烦,问题如下:
有n堆包含m个块的方块,设计一个用C语言编写的程序来控制机械臂,将块从初始配置移动到最终配置,使用尽可能少的动作次数,你的机械臂每次只能移动一个块,并且只能取栈顶上的块。你的解决方案应该使用指针或递归方法。
换句话说,这些方块应该从这里移动(假设有3个堆和3个块):
| || || |
|3|| || |
|2||1|| |
转换为:
| ||1|| |
| ||2|| |
| ||3|| |
使用最短的步骤打印每一步。
我想也许我可以使用某种树来解决它(可能是n叉树?),因为这是指针和递归方法的完美运用,但到目前为止它已经被证明是不成功的,我在定义存储所有动作的结构时遇到了很多麻烦,因为我每次想要添加一个新动作到树中时都必须检查是否之前已经执行过此动作,我希望每个叶子都是唯一的,这样当我找到解决方案时它将给我最短的路径。
这是我考虑的数据结构:
typedef struct tree(
char[MAX_BLOCK][MAX_COL] value;
struct tree *kids
struct tree *brothers;
)Tree;
我对C语言还很陌生,如果下面的内容有错误,请提前谅解,因为我更熟悉Java。
你们会如何做?有什么好的想法吗?
1 > 2 > 3
——就像汉诺塔问题一样。对于发帖者来说,看看C语言中的汉诺塔解法会很有益。 - Burhan Khalid