Leetcode打卡:捕获黑皇后需要最少的移动次数

发布于:2024-12-06 ⋅ 阅读:(140) ⋅ 点赞:(0)

执行结果:通过

题目:3001 捕获黑皇后需要最少的移动次数

现有一个下标从 1 开始的 8 x 8 棋盘,上面有 3 枚棋子。

给你 6 个整数 a 、b 、c 、d 、e 和 f ,其中:

  • (a, b) 表示白色车的位置。
  • (c, d) 表示白色象的位置。
  • (e, f) 表示黑皇后的位置。

假定你只能移动白色棋子,返回捕获黑皇后所需的最少移动次数。

请注意

  • 车可以向垂直或水平方向移动任意数量的格子,但不能跳过其他棋子。
  • 象可以沿对角线方向移动任意数量的格子,但不能跳过其他棋子。
  • 如果车或象能移向皇后所在的格子,则认为它们可以捕获皇后。
  • 皇后不能移动。

示例 1:

输入:a = 1, b = 1, c = 8, d = 8, e = 2, f = 3
输出:2
解释:将白色车先移动到 (1, 3) ,然后移动到 (2, 3) 来捕获黑皇后,共需移动 2 次。
由于起始时没有任何棋子正在攻击黑皇后,要想捕获黑皇后,移动次数不可能少于 2 次。

示例 2:

输入:a = 5, b = 3, c = 3, d = 4, e = 5, f = 2
输出:1
解释:可以通过以下任一方式移动 1 次捕获黑皇后:
- 将白色车移动到 (5, 2) 。
- 将白色象移动到 (5, 2) 。

提示:

  • 1 <= a, b, c, d, e, f <= 8
  • 两枚棋子不会同时出现在同一个格子上。

代码以及解题思路

代码:

int minMovesToCaptureTheQueen(int a, int b, int c, int d, int e, int f) {
     if ((a == e && (c!=a || (d < fmin(b, f) || d > fmax(b, f)))) ||
        (b == f && (d!=b || (c < fmin(a, e) || c > fmax(a, e))))) // 车能直接吃到
    {
        return 1;
    } else if ((c+d==e+f && (a+b!=c+d || a<fmin(c,e) || a>fmax(c,e))) || (c-d==e-f && (a-b!=c-d || a<fmin(c,e) || a>fmax(c,e)))) // 象能直接吃到
    {
        return 1;
    } else // 都不能直接那无论是谁走两步就能吃到
    {
        return 2;
    }
}

解题思路:

这个问题是关于在一个二维棋盘上,给定皇后(Queen)和车(Rook)或象(Bishop)的位置,计算最少需要多少步才能将皇后捕获。皇后、车和象的位置分别由 (a, b)(c, d)(e, f) 表示。皇后 (e, f) 是被捕获的目标,(c, d) 是车或象的位置。

解题思路可以分解如下:

  1. 检查车能否一步捕获皇后
    • 如果车的横坐标 c 等于皇后的横坐标 e,并且车的纵坐标 d 不在皇后纵坐标 f 的位置上,并且车不在皇后的垂直方向上(即 d 不等于 b,且 d 不在 b 和 f 之间),则车可以水平移动到皇后的位置,直接捕获皇后。
    • 类似地,如果车的纵坐标 d 等于皇后的纵坐标 f,并且车的横坐标 c 不在皇后横坐标 e 的位置上,并且车不在皇后的水平方向上(即 c 不等于 a,且 c 不在 a 和 e 之间),则车可以垂直移动到皇后的位置,直接捕获皇后。
  2. 检查象能否一步捕获皇后
    • 如果车和象的位置 (c, d) 满足 (c+d) == (e+f),即它们在同一对角线上,并且象的起点 (a, b) 不在这条对角线上(即 (a+b) != (c+d)),并且象的起点 (a, b) 不在皇后 (e, f) 和车 (c, d) 之间的对角线上(即 a 不在 c 和 e 的最小值与最大值之间),则象可以沿对角线移动到皇后的位置,直接捕获皇后。
    • 类似地,如果 (c-d) == (e-f),即它们在同一反对角线上,并且象的起点 (a, b) 不在这条反对角线上(即 (a-b) != (c-d)),并且象的起点 (a, b) 不在皇后 (e, f) 和车 (c, d) 之间的反对角线上(即 a 不在 c 和 e 的最小值与最大值之间),则象可以沿反对角线移动到皇后的位置,直接捕获皇后。
  3. 如果车和象都不能一步捕获皇后
    • 无论是车还是象,都可以通过两步来捕获皇后。例如,车可以先移动到皇后所在行或列的某个空位,然后移动到皇后的位置;象则可以先移动到与皇后在同一对角线上的某个空位,然后移动到皇后的位置。
    • 因此,如果上述两种情况都不满足,即车和象都不能一步捕获皇后,那么返回 2,表示需要两步才能捕获皇后。

网站公告

今日签到

点亮在社区的每一天
去签到