mirror of
https://gitee.com/coder-xiaomo/leetcode-problemset
synced 2025-01-10 18:48:13 +08:00
79 lines
4.4 KiB
HTML
79 lines
4.4 KiB
HTML
<p>给你一个 <code>50 x 50</code> 的国际象棋棋盘,棋盘上有 <strong>一个</strong> 马和一些兵。给你两个整数 <code>kx</code> 和 <code>ky</code> ,其中 <code>(kx, ky)</code> 表示马所在的位置,同时还有一个二维数组 <code>positions</code> ,其中 <code>positions[i] = [x<sub>i</sub>, y<sub>i</sub>]</code> 表示第 <code>i</code> 个兵在棋盘上的位置。</p>
|
||
|
||
<p>Alice 和 Bob 玩一个回合制游戏,Alice 先手。玩家的一次操作中,可以执行以下操作:</p>
|
||
|
||
<ul>
|
||
<li>玩家选择一个仍然在棋盘上的兵,然后移动马,通过 <strong>最少</strong> 的 <strong>步数</strong> 吃掉这个兵。<strong>注意</strong> ,玩家可以选择 <strong>任意</strong> 一个兵,<strong>不一定</strong> 要选择从马的位置出发 <strong>最少</strong> 移动步数的兵。</li>
|
||
<li><span>在马吃兵的过程中,马 <strong>可能</strong> 会经过一些其他兵的位置,但这些兵 <strong>不会</strong> 被吃掉。<strong>只有</strong> 选中的兵在这个回合中被吃掉。</span></li>
|
||
</ul>
|
||
|
||
<p>Alice 的目标是 <strong>最大化</strong> 两名玩家的 <strong>总</strong> 移动次数,直到棋盘上不再存在兵,而 Bob 的目标是 <strong>最小化</strong> 总移动次数。</p>
|
||
|
||
<p>假设两名玩家都采用 <strong>最优</strong> 策略,请你返回可以达到的 <strong>最大</strong> 总移动次数。</p>
|
||
|
||
<p>在一次 <strong>移动</strong> 中,如下图所示,马有 8 个可以移动到的位置,每个移动位置都是沿着坐标轴的一个方向前进 2 格,然后沿着垂直的方向前进 1 格。</p>
|
||
|
||
<p><img src="https://assets.leetcode.com/uploads/2024/08/01/chess_knight.jpg" style="width: 275px; height: 273px;" /></p>
|
||
|
||
<p> </p>
|
||
|
||
<p><strong class="example">示例 1:</strong></p>
|
||
|
||
<div class="example-block">
|
||
<p><span class="example-io"><b>输入:</b>kx = 1, ky = 1, positions = [[0,0]]</span></p>
|
||
|
||
<p><span class="example-io"><b>输出:</b>4</span></p>
|
||
|
||
<p><strong>解释:</strong></p>
|
||
|
||
<p><img alt="" src="https://assets.leetcode.com/uploads/2024/08/16/gif3.gif" style="width: 275px; height: 275px;" /></p>
|
||
|
||
<p>马需要移动 4 步吃掉 <code>(0, 0)</code> 处的兵。</p>
|
||
</div>
|
||
|
||
<p><strong class="example">示例 2:</strong></p>
|
||
|
||
<div class="example-block">
|
||
<p><span class="example-io"><b>输入:</b>kx = 0, ky = 2, positions = [[1,1],[2,2],[3,3]]</span></p>
|
||
|
||
<p><span class="example-io"><b>输出:</b>8</span></p>
|
||
|
||
<p><strong>解释:</strong></p>
|
||
|
||
<p><strong><img alt="" src="https://assets.leetcode.com/uploads/2024/08/16/gif4.gif" style="width: 320px; height: 320px;" /></strong></p>
|
||
|
||
<ul>
|
||
<li>Alice 选择 <code>(2, 2)</code> 处的兵,移动马吃掉它需要 2 步:<code>(0, 2) -> (1, 4) -> (2, 2)</code> 。</li>
|
||
<li>Bob 选择 <code>(3, 3)</code> 处的兵,移动马吃掉它需要 2 步:<code>(2, 2) -> (4, 1) -> (3, 3)</code> 。</li>
|
||
<li>Alice 选择 <code>(1, 1)</code> 处的兵,移动马吃掉它需要 4 步:<code>(3, 3) -> (4, 1) -> (2, 2) -> (0, 3) -> (1, 1)</code> 。</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<p><strong class="example">示例 3:</strong></p>
|
||
|
||
<div class="example-block">
|
||
<p><span class="example-io"><b>输入:</b>kx = 0, ky = 0, positions = [[1,2],[2,4]]</span></p>
|
||
|
||
<p><span class="example-io"><b>输出:</b>3</span></p>
|
||
|
||
<p><strong>解释:</strong></p>
|
||
|
||
<ul>
|
||
<li>Alice 选择 <code>(2, 4)</code> 处的兵,移动马吃掉它需要 2 步:<code>(0, 0) -> (1, 2) -> (2, 4)</code> 。注意,<code>(1, 2)</code> 处的兵不会被吃掉。</li>
|
||
<li>Bob 选择 <code>(1, 2)</code> 处的兵,移动马吃掉它需要 1 步:<code>(2, 4) -> (1, 2)</code> 。</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<p> </p>
|
||
|
||
<p><strong>提示:</strong></p>
|
||
|
||
<ul>
|
||
<li><code>0 <= kx, ky <= 49</code></li>
|
||
<li><code>1 <= positions.length <= 15</code></li>
|
||
<li><code>positions[i].length == 2</code></li>
|
||
<li><code>0 <= positions[i][0], positions[i][1] <= 49</code></li>
|
||
<li><code>positions[i]</code> 两两互不相同。</li>
|
||
<li>输入保证对于所有 <code>0 <= i < positions.length</code> ,都有 <code>positions[i] != [kx, ky]</code> 。</li>
|
||
</ul>
|