8个皇后问题。此JavaScript代码如何工作?

问题描述 投票:1回答:1

这大约是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;
};
javascript computer-science chess
1个回答
0
投票

让我们看看对角线碰撞的皇后:

  👸      [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[...],则基本上有了代码。

© www.soinside.com 2019 - 2024. All rights reserved.