【问题标题】:What is the logic behind calculating diagonals on a chessboard?在棋盘上计算对角线的逻辑是什么?
【发布时间】:2019-10-22 07:14:45
【问题描述】:

给定一个主教在一个 8 * 8 棋盘上的位置,任务是计算一个主教在一次移动中可以访问的方格总数。主教的位置用棋盘的行号和列号表示。

例子:

Input: Row = 4, Column = 4 Output: 13 Input: Row = 1, Column = 1 Output: 7

做法:象棋棋局中,象只能沿对角线走,每走一步没有距离限制。

所以,我们也可以说 Bishop 可以以四种方式移动,即从当前位置对角线左上角、右上角、左下角和右下角。

我们可以通过以下方式计算每次移动中访问的方格数:

左上移动访问的总方块 = Math.min(r, c) – 1

右上角移动中访问的总方块 = Math.min(r, 9 – c) – 1

左下移动访问的总方块 = 8 – Math.max(r, 9 – c)

右下移动访问的总方块 = 8 – Math.max(r, c)

其中rc是主教在棋盘上当前位置的坐标。

伙计们,我无法弄清楚上述对角线计算背后的逻辑。请帮我找出上面计算对角线的逻辑是什么???我只需要逻辑。无需代码。

(另外,如果您能帮助了解类似国际象棋问题或矩阵的基本背后逻辑,那就太好了)

Chessboard image for reference

【问题讨论】:

    标签: logic chess


    【解决方案1】:

    到棋盘边缘的左上角距离确实是min(r, c) - 1。鉴于主教从r 等级开始,它在到达第一等级之前最多只能提升r - 1 等级。如果c < r,它可能会击中之前的第一个文件,在这种情况下,它只能移动c - 1 方块。例如,如果主教从r = 5c = 4 开始,它将能够移动三个方格,而不是四个方格。因此左上角的公式是min(r - 1, c - 1),可以重构为min(r, c) - 1

    类似地,当朝向左下角时,排名增加而文件减少。主教最多可以移动8 - r 等级和c - 1 文件,所以左下角的公式是min(8 - r, c - 1)。这可以重构为8 – max(r, 9 – c),尽管这个表达式看起来更复杂。

    【讨论】:

    • 很好的解释。
    【解决方案2】:

    只需将此公式应用于任何方向:distance = max(abs(x1 - x2), abs(y1 - y2))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-23
      相关资源
      最近更新 更多