我正在尝试测试一个 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;
}
我究竟做错了什么?