等级求解和寻路

时间:2013-08-21 22:54:57

标签: algorithm language-agnostic path-finding

我最近玩了一个名为Just A Trim Please的小游戏,真的很喜欢整个概念。

游戏的基本目标是通过遍历每个广场一次来修剪整个草坪。您的割草机从瓷砖开始,从那里您可以向各个方向移动(除非墙壁阻挡您)。如果你不止一次在草地上跑,它会恶化,你会失去水平。您只能向左,向右,向上或向下移动。 但是,当您完成游戏时,会添加更多图块:

  • 只能一次(草)的瓷砖。
  • 在恶化之前你可以跑过两次的瓷砖(更高的草)。
  • 你可以随心所欲地 (具体)。
  • 无法覆盖的图块(墙)。

如果你没理解我的意思,那就去玩游戏吧,你会明白的。

我设法编写了一个蛮力算法,它可以解决只有第一种瓦片的谜题(基本上是Knight's Tour问题的变体)。然而,这不是最佳的,只适用于只能运行一次的瓷砖拼图。我完全迷失了如何处理额外的瓷砖。

给定起点和平铺贴图,是否有方法或算法来找到解决水平的路径(如果可以解决)?我不关心效率,这只是我心中的一个问题。我很好奇你将如何去解决它。

我不是在寻找代码,只是指导方针,或者如果可能的话,还要查看程序的纯文本说明。如果但是有伪代码,请分享! :)

(另外,我不完全确定这是否与路径寻找有关,但这是我最好的猜测。)

2 个答案:

答案 0 :(得分:6)

问题是有限的,所以,确实有一种算法。

非确定性算法可以通过猜测正确的移动然后验证它们是否有效来轻松解决问题。可以通过使用例如回溯搜索来确定该算法。

如果你想减少额外的瓷砖(较高的草和混凝土)到标准草,你可以像这样:

  • 每个连续的混凝土块首先被缩小为单个图形顶点,然后移除顶点,因为混凝土块区域实际上只是一种移动到达其他区块的方式。
  • 每个较高的草地砖都被两个与原始邻居相连的顶点所取代,但彼此之间没有。

示例:G =草,T =高草,C =混凝土

G G T
G C T
C C G

将其视为图表:

enter image description here

现在改变混凝土块。首先将它们缩小为一个(因为它们都已连接):

enter image description here

然后删除顶点,连接“直通”:

enter image description here

然后展开高草砖,将副本连接到与原件相同的节点。

enter image description here

然后用G代替T,T'。你现在有一个不再是矩形网格但只包含草节点的图形。

enter image description here

当且仅当原始问题可以解决时,才能解决转换后的问题,并且可以将已转换问题的解决方案转换为原始问题的解决方案。

答案 1 :(得分:1)

旅行推销员有一个DP approach

也许你可以修改它(重新计算,因为添加了更多的部分)。 对于一块长草,你可以将它分成两个节点,因为你必须访问它两次。然后将两个节点重新连接到它周围的节点。