【问题标题】:8 queen problem. How work this JavaScript code?8皇后问题。这个 JavaScript 代码是如何工作的?
【发布时间】:2020-03-24 22:57:53
【问题描述】:

这是关于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;
};

【问题讨论】:

  • 什么是a? ...这是一个列位置数组对吗?
  • a 是 8 个随机数 (1-8) 的数组,代表皇后的位置

标签: javascript computer-science chess


【解决方案1】:

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

  ?      [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[...],您基本上就拥有了您的代码。

【讨论】:

  • 为什么我们有j != i?是干什么用的?
  • 因为你不想把女王和自己比较。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-13
  • 2013-04-23
  • 2015-04-09
相关资源
最近更新 更多