“解锁我”拼图表示

时间:2014-11-04 15:49:03

标签: python python-2.7

我正在尝试实施一个程序来解决"解锁我"难题。对于那些不了解它的人,"取消阻止我"是一个滑块拼图,你有一个1x1,1x2,2x1和2x2盒子的棋盘,目标是通过一个开口将红色框移出棋盘。

我的问题是我如何代表董事会成员国?我在互联网上搜索并找到了代表这样状态的建议。

例如这个董事会:Board State

代表:Grid representation

我可以理解这种表示是如何工作的。当我想移动其中一个盒子时,问题就来了。我如何检查一个盒子是1x1,1x2,2x1还是2x2,以检查是否可以移动?

关于我如何做到这一点的任何想法,或任何其他更容易的"表示?

2 个答案:

答案 0 :(得分:3)

我愿意:

  • 网格宽度
  • 网格高度
  • 方框列表,每个方框:
    • 包装盒的尺寸(不必是方形或矩形)
      • 方框宽度
      • 盒子的高度
      • 在框的范围内占据的每个单元格
    • 左上角单元格的位置,因此坐标(x,y)
    • 包装盒的名称(例如," A"," B"," C")

如果这是一个解锁拼图,您需要在网格外滑动一个框,您还需要:

  • 具有退出
  • 的网格单元的坐标
  • 该单元格的出口位置(例如,"北","东"等)。当出口位于角落单元中时,这是必要的。

这应该允许您根据需要执行任何计算。给定框所在的左上角单元格,框的尺寸以及知道框内占用的单元格,您可以计算是否发生了碰撞。

上述表示也支持任意形状,而不仅仅是矩形和正方形。

答案 1 :(得分:0)

您可以始终拥有与“网格”相同尺寸的数组,退出的特殊值为-1,空方格为0,每个块都有该块的编号。

然后,您可以使用Check函数,该函数采用块编号和方向,并且对于具有块编号的每个当前单元格作为值检查,相邻单元格具有相同的块编号或者是<1。

移动功能会将所需方向的值设置为零,稍微关注顺序事项,您可以从第一个开始,将所需方向的单元格设置为所需数字,将当前方格设置为0.最小的ifs和几个循环。