这是关于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[...],则基本上已经有了代码。

关于javascript - 8皇后问题。此JavaScript代码如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60840580/

10-10 17:09