图片好像看得不太清楚,直接贴上来吧,不过格式就不太好看了,顺便说一下我这里是不能还原的返回true
//判断随机生成的数组逆序数是否为偶数,是否需要重新生成
bool Puzzle::Judge(const int* state)
{
int inver_n = state[0];//设定逆序数变量并初始为首元素
int index_zero = 0;//记录空白方块的下标
for (int index = 1, tmp; index < 9; index++)
{
if (!state[index])
{
index_zero = index;
continue;
}
if (index < 5)
{
tmp = state[index];
for (int i = index - 1; i >= 0 && tmp; i--)
{
if (state[i] < state[index])
{
tmp--;
}
}
}
else
{
tmp = 0;
for (int i = index + 1; i < 9 && tmp <= state[index]; i++)
{
if (state[i] < state[index])
{
tmp++;
}
}
}
inver_n += tmp;
}
inver_n -= index_zero;
return inver_n % 2;
}