我在试着测试15个谜题是否可以解决。我写了一个方法,它对大多数谜题都有效,但对一些谜题无效。
例如,这个难题可以用两个动作(0,11),(0,12)来解决
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 11, 13, 14, 15, 12
下面是更直观的谜题:
1 2 3 4
5 6 7 8
9 10 0 11
13 14 15 12
但是这个谜题有一个奇数奇偶校验3,所以应该是不可解的。
public boolean isSolvable(int[] puzzle)
{
int parity = 0;
for (int i = 0; i < puzzle.length; i++)
{
for (int j = i + 1; j < puzzle.length; j++)
{
if (puzzle[i] > puzzle[j] && puzzle[i] != 0 && puzzle[j] != 0)
{
parity++;
}
}
}
if (parity % 2 == 0)
{
return true;
}
return false;
}
我做错了什么?
我发现这些条件需要检查任何N x N
谜题,以确定它是否可解。
显然,由于您的空白磁贴位于偶数行上(从底部开始计算),奇偶校验是奇数,网格宽度是偶数,因此此难题是可以解决的。
这是根据链接中的规则进行检查的算法:
public boolean isSolvable(int[] puzzle)
{
int parity = 0;
int gridWidth = (int) Math.sqrt(puzzle.length);
int row = 0; // the current row we are on
int blankRow = 0; // the row with the blank tile
for (int i = 0; i < puzzle.length; i++)
{
if (i % gridWidth == 0) { // advance to next row
row++;
}
if (puzzle[i] == 0) { // the blank tile
blankRow = row; // save the row on which encountered
continue;
}
for (int j = i + 1; j < puzzle.length; j++)
{
if (puzzle[i] > puzzle[j] && puzzle[j] != 0)
{
parity++;
}
}
}
if (gridWidth % 2 == 0) { // even grid
if (blankRow % 2 == 0) { // blank on odd row; counting from bottom
return parity % 2 == 0;
} else { // blank on even row; counting from bottom
return parity % 2 != 0;
}
} else { // odd grid
return parity % 2 == 0;
}
}
问题内容: 我知道我可以这样做: 然后只需编写语句中所需的代码。 还有其他方法可以检查它们是否相等? 问题答案: 怎么了 if(!Arrays.equals(array1,array2)) 与相同,即是同一数组。这不是大多数人期望的。 比较数组的内容。
例如,我知道在检查字符串时,可以执行如下操作 但是是否有一种方法来检查一个字符是否匹配一个可能性列表?或者我必须逐一检查,例如 ...等。
问题内容: 如何用Java代码检查当前的JVM是否有无限强度的加密可用? 问题答案: 我认为您可能可以使用Cipher.getMaxAllowedKeyLength(),同时还将您使用的密码与已知的“良好”安全密码(例如AES)列表进行比较。 这是一篇参考文章,列出了自Java 1.4起当前最大的密钥大小管辖权限制(除非法律也有所改变,否则这些可能没有改变-参见下文)。 如果您在有密码进出口限制的
问题内容: 有没有一种方法可以检查nodestore的firestore中是否存在子集合? 目前,我正在使用文档,但是我需要检查文档中是否存在子类以便写入一些数据。 问题答案: 就在这里。您可以使用docs.length来知道子集合是否存在。 我制作了一个样本来指导您,希望对您有所帮助。
问题内容: 我正在使用AndEngine将精灵添加到屏幕上,并使用movemodifier方法遇到。 我有两个整数MaxDuration和MinDuration; 我想要做的是当用户达到一定增量的分数时。 例如,当用户达到20(整数改变)时,用户达到40(整数改变)。因此,基本上是20分,每次得分遇到一个20分之一的数字,即整数的变化。我希望这是有道理的。 有什么方法或方法可以做到这一点吗?我有一
这是我试图做的一个例子: 我注意到它在使用时对第二个自定义验证器进行验证 有没有一种方法可以添加多个验证模式,让proptypes使用在reactjs中签入?