我正在开发一个应用程序,以查找给定特定起始结构的拼图立方体的可能解决方案的数量。
我将所有独特的解决方案都存储在内存中,我将与给定的结构进行比较以确定有多少解决方案是可能的。
为此,我必须将立方体围绕每个面旋转 90 度 4 次,以便检查所有可能的方向。稍后我将考虑反思。
对于一个立方体,有 6 个面,进行 4 次旋转,总共进行 24 次操作。
我正在努力实现一种有效的算法,因为围绕一个轴的旋转等同于围绕另一个 2 轴的旋转'。
例如:绕 x 轴旋转产生的方向与绕 y 轴旋转,然后绕 z 轴旋转相同。因此,我当前的实现需要 64 次操作,这是多余的,因为我要多次检查相同的方向。
当前算法:
public static int getPossibleSolutionCount(Map<PieceIndex, Piece> pieces)
{
int count = 0;
for (Solution s : solutions)
{
for (int z = 0; z < 4; z++)
{
for (int x = 0; x < 4; x++)
{
for (int y = 0; y < 4; y++)
{
if (s.isDerrivedFrom(pieces))
{
count++;
}
//all rotation calls rotate the piece / structure byt 90 degrees
pieces.values().forEach(piece -> piece.rotate(GameObject.Axis.Y_AXIS));
}
pieces.values().forEach(piece -> piece.rotate(GameObject.Axis.X_AXIS));
}
pieces.values().forEach(piece -> piece.rotate(GameObject.Axis.Z_AXIS));
}
}
return count;
}
我该如何改进这一点,以便我不会重复相同的方向,即我只能签入 24 次迭代而不是 64 次。
宝慕林4294392
相关分类