这大约是8个皇后的问题,我没有得到这部分代码。你能解释一下吗?我不知道如何在此代码上检测冲突?什么是dp?
// Count the number or row collisions
var rowCollisions = function (a) {
collision = 0;
for (var i in a) {
for (var j in a) {
if (j != i) {
collision = a[i] == a[j] ? collision+1 : collision;
}
}
}
return collision;
};
// Count the number of column collisions
var diaCollisions = function (a) {
collision = 0;
for (var i in a){
for (var j in a){
if (i != j) {
dp = Math.abs(i-j);
collision = a[i] == a[j]+dp ? collision+1 : collision;
collision = a[i] == a[j]-dp ? collision+1 : collision;
}
}
}
return collision / 2;
};
让我们看看对角线碰撞的皇后:
👸 [0, 0]
👸 [1, 1]
👸 [2, 0]
这是两个不会冲突的地方:
👸 [0, 0]
👸[1, 2]
因此,如果您查看碰撞后的皇后位置([1,1],[-1、1])和非收缩后的皇后位置([1,2])之间的差异,则可以看到该队列如果x和y的差相等(则忽略符号),则会发生碰撞。我们可以将其放入公式中:
const collide = Math.abs(queen1.x - queen2.x) === queen1.y - queen2.y;
现在,如果将queen1.x
替换为i
,将queen2.x
替换为j
,并且将.y
坐标替换为a[...]
,则基本上有了代码。