首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rubik蛇形匹配算法

Rubik蛇形匹配算法
EN

Stack Overflow用户
提问于 2020-08-10 22:34:24
回答 1查看 45关注 0票数 0

我正在尝试实现一个魔蛇模拟,如果我有一个模型,是从字符串000000020000200000020000 24块形成的,每个字符意味着相对块的旋转角度,如果一个块旋转了,它就会旋转它旁边的所有块。

代码语言:javascript
运行
复制
if 0 = no rotation
1 = 90
2 = 180
3 = 270

如何检查不同步骤的200002000000020000200000是否形成相同的形状

我是用Java实现的。

EN

回答 1

Stack Overflow用户

发布于 2020-08-10 23:07:41

把你的两条蛇叫成snake1和snake2。

假设snake1和snake2形成相同的形状。想想snake1的第一个代码块。此块应与snake2中的一个块对齐,以便两个形状重合。snake1的第一个块与snake2的哪个块对齐?

这个问题给出了算法的开始。如果snake1的第一个块是蓝色的,那么一个接一个地循环遍历snake2的所有蓝色块,并假设第一个snake1块与这个snake2块对齐。与这个snake2块相比,第一个snake1块可能有两个方向;您必须遍历这两个可能的方向。

一旦选择了一块snake2和一个方向,调用(0,0,0)作为snake1的第一个块在空间中的位置,循环遍历snake1的所有块,并通过在表示3d空间中所有可能位置的数组中写入blueblack来存储它们的位置。数组中不包含块的所有单元都被标记为empty

在第二个数组中对snake2块执行相同的操作。

当且仅当两个数组表示相同的形状时,两条蛇表示相同的形状。

PS:由于块是棱柱而不是立方体,如果数组中的一个单元表示一个立方体,那么在描述单元包含的内容时,您需要比blue/black/empty更明确一点。因此您需要执行以下任一操作:

  • 找到了一种比简单的3d数组更聪明的方式来表示空间;或者
  • 找到了对单元格可能内容的很好的描述(类似于“what orientation").

中的半黑半蓝”

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63342299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档