jQuery实现华容道小游戏发现无解的情况
js代码
/**
* @see 数列的逆序数为偶数
* @see 数字华容道,必然有解,只存在于如下3个细分情形:
* @see 若格子列数为奇数,则逆序数必须为偶数;
* @see 若格子列数为偶数,且逆序数为偶数,则当前空格所在行数与初始空格所在行数的差为偶数;
* @see 若格子列数为偶数,且逆序数为奇数,则当前空格所在行数与初始空格所在行数的差为奇数。
*/
function getTempArray(radix) {
var array = [];
for (var i = 1; i < radix * radix; i++)
array.push(i);
array.sort(function() {
return Math.random() - 0.5;
});
if (!canUse(array, radix))
return getTempArray(radix);
return array;
}
// 判断生成的数组是否符合规则
function canUse(numbers, radix) {
// 声明标识逆序数的个数
var ivsNumber = 0;
// 遍历数组
for (var i = 0; i < numbers.length; i++) {
for (var j = i + 1; j < numbers.length; j++) {
// 依次两两对比,判断前一个是否比后一个大
if (numbers[i] > numbers[j]) {
// 是,则ivsNumber加1
ivsNumber++;
}
}
}
return (ivsNumber % 2 == 0);
}
运行结果及报错内容
当程序是3x3的九宫格时,貌似没有问题;但使用4x4即偶数的情况时,就会发生无解无法还原的bug。
有劳各位给个明确思路,谢谢!