拼图解算器 - TreeNode帮助

时间:2011-08-31 06:50:22

标签: iphone objective-c puzzle treenode macos

我正在尝试编写拼图求解器应用。 我需要找出它需要多少动作,以及有多少解决方案。

我宁愿不提供太多关于这个难题的细节。 但是玩家在网格中移动(比如5 x 7) 当它们移动时,可以捕获障碍物,因此需要跟踪板的状态。 (这可以作为字符串或数组完成)

我知道我需要创建一个TreeNode,从root开始(玩家开始位置) 并为每个节点的子节点提供可能的移动,直到计算出所有可能的移动。 然后可以收集拼图统计数据。 可能的解决方案数量,要解决的最小移动次数,要求解决的平均移动次数等等

我创建了拼图逻辑,如果移动可能会返回。 我在创建TreeNode结构时遇到问题,并确保不会重复移动。

益智应用程序本身就在iPhone上,但我正在Mac上编写这个求解器/编辑器。 非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

也许你可以做一个tree recursion的变种?以递归方式遍历树,让每个端节点返回到达那里的难度值(如果有不同移动相关的成本)以及它是如何到达那里的描述。这当然要求玩家只朝一个方向移动,否则树形结构不能描述问题。有关您的确切问题的更多信息会有所帮助。

这可能是一个繁重的算法,但它完成了工作。

答案 1 :(得分:1)

为了检测重复状态,您可以在运行时将状态置于一个集合中,然后在每次找到新状态时检查它们是否已存在。虽然如果空间是一个问题,你将不得不求助于检查孩子是否与父母不同,或者这种方法的某种限制版本。

节点类非常简单。它只包含一个指向父项的指针(如果有一个)和它所拥有的变量(例如状态)。您可能还需要其他变量,具体取决于您的应用程序。

当你到达一个节点时,你使用后继函数从那里获取所有子节点(一次可以到达的状态)并将它们添加到列表中。你从列表中摘取遍历树。