[博弈论] 矩形消除游戏:策略窃取与先手必胜证明

[博弈论] 矩形消除游戏:策略窃取与先手必胜证明

TAG:博弈论、策略窃取、Chomp、思维题
题型:有限二人零和完全信息博弈

题目描述

Alice 和 Bob 在一个 \(n\times m\) 的点阵上玩游戏。

点阵共有 \(n\) 行、\(m\) 列,左上角的点记为 \((1,1)\)。Alice 先手,两人轮流进行操作。

每次操作时,当前玩家选择一个仍然存在的点 \((x,y)\),并删除所有满足

\[i\ge x,\qquad j\ge y \]

的点 \((i,j)\)。因此,删除区域包含选中的点本身,也包含它右下方的所有点。

左上角的点 \((1,1)\) 是“毒点”:选择并删除 \((1,1)\) 的玩家立即失败

假设双方都采用最优策略,判断谁能获胜。


一、先从小局面开始尝试

1. \(1\times1\)

棋盘上只有毒点 \((1,1)\)。Alice 没有安全操作,只能选择毒点,因此立即失败。

所以 \(1\times1\) 是先手必败态。

2. \(1\times2\)

Alice 可以选择 \((1,2)\),只删除这个点,棋盘中只剩毒点。

Bob 接下来只能选择毒点,所以 Bob 失败,Alice 获胜。

同理,\(2\times1\) 也是先手必胜态。

3. 更大的矩形

直接枚举具体操作会迅速变得困难。一次操作以后,剩余区域不一定还是矩形,而可能是左上角对齐的阶梯形:

● ● ● ●
● ● × ×
● ● × ×

如果试图对所有阶梯形局面计算胜负,状态数量会很大。

但题目只问完整矩形的初始局面,这给了我们一个更有力的切入点:完整矩形存在一个特殊的最右下角点 \((n,m)\),并且任意非毒点操作都会覆盖它。

这正是策略窃取证明所需的结构。


二、局面的表示与基本性质

对于一个仍然存在的点集 \(S\),选择 \((x,y)\) 时删除的点集记为

\[D(x,y)=\{(i,j)\mid i\ge x,\ j\ge y\}. \]

操作后的局面为

\[S\setminus D(x,y). \]

游戏每次至少删除一个点,所以点数严格减少。棋盘有限,因此游戏一定会在有限步内结束,不可能出现循环或平局。

于是,每个局面都可以递归地划分为:

  • 必胜态:存在一个不选择毒点的安全操作,使对手进入必败态;
  • 必败态:不存在这样的安全操作。

特别地,只剩毒点时,当前玩家没有安全操作,所以这是必败态。


三、抓住关键:最右下角点的“可吸收性”

假设 \(nm>1\),那么最右下角点

\[z=(n,m) \]

不是毒点,可以被安全选择。

更关键的是,对于矩形中的任意点 \((x,y)\),都有

\[x\le n,\qquad y\le m, \]

所以

\[z=(n,m)\in D(x,y). \]

也就是说,无论之后选择哪个仍存在的点,它的删除区域都会包含原来的最右下角点。

因此,先单独删掉 \(z\),再选择 \((x,y)\),与一开始直接选择 \((x,y)\) 的结果完全相同:

\[\begin{aligned} \bigl(S\setminus\{z\}\bigr)\setminus D(x,y) &=S\setminus\bigl(\{z\}\cup D(x,y)\bigr)\\ &=S\setminus D(x,y), \end{aligned} \]

其中第二个等号使用了 \(z\in D(x,y)\)。

这条“额外删除的最右下角点会被后续操作吸收”的性质,是整个策略窃取证明的核心。


四、策略窃取证明

下面证明:只要 \(nm>1\),完整矩形一定是 Alice 的必胜态。

设初始完整矩形局面为 \(R\)。反设 \(R\) 是必败态。

第一步:Alice 先删最右下角点

Alice 选择

\[z=(n,m). \]

由于 \(z\) 位于最右下角,这次只会删除 \(z\) 自己。操作后的局面记为

\[S=R\setminus\{z\}. \]

我们反设 \(R\) 是必败态,因此从 \(R\) 进行任意安全操作,都会把一个必胜态交给对手。

所以,轮到 Bob 面对的 \(S\) 必须是必胜态。

第二步:假想 Bob 在 \(S\) 中使用必胜策略

因为 \(S\) 是必胜态,所以 Bob 一定存在某个安全操作 \((x,y)\),使操作后的局面 \(T\) 是必败态:

\[T=S\setminus D(x,y). \]

这里的 \((x,y)\) 不可能是毒点,因为选择毒点会让 Bob 立即失败,不可能成为必胜操作。

第三步:Alice 窃取这个操作

回到最初的完整矩形 \(R\)。

Alice 不再先删 \(z\),而是第一步直接选择刚才 Bob 的操作 \((x,y)\)。

由于 \(z=(n,m)\in D(x,y)\),有

\[\begin{aligned} T &=\bigl(R\setminus\{z\}\bigr)\setminus D(x,y)\\ &=R\setminus D(x,y). \end{aligned} \]

所以 Alice 在初始局面直接选择 \((x,y)\),也能得到完全相同的必败态 \(T\),并把它交给 Bob。

这说明 \(R\) 中存在一步把对手送入必败态的操作,因此 \(R\) 应当是必胜态,与“\(R\) 是必败态”的反设矛盾。

所以反设不成立。

因此,只要 \(nm>1\),完整矩形一定是 Alice 的必胜态。


五、为什么称为“策略窃取”

证明没有直接算出 Alice 第一步究竟应该选择哪个点,而是进行了如下推理:

  1. 假设 Alice 没有必胜策略;
  2. Alice 先进行一个不会妨碍后续操作的试探操作;
  3. 在假设下,Bob 应当拥有某个必胜操作;
  4. Alice 发现自己可以在第一步直接执行 Bob 的这个操作;
  5. 于是 Alice“窃取”了本应属于 Bob 的策略,得到矛盾。

所以,这个证明给出的是:

Alice 的必胜第一步一定存在。

但它通常不能高效告诉我们:

Alice 的必胜第一步具体是哪一步。

这也是经典 Chomp 游戏最著名的特点之一:策略窃取可以证明任意非平凡矩形中先手必胜,但并未同时给出一般情形下的显式必胜策略。


六、为什么试探操作必须选 \((n,m)\)

策略窃取并不是随便先走一步都能成立。

我们需要试探操作删掉的点满足:

无论 Bob 随后选择哪个点,这个点都会被 Bob 的删除区域一并删除。

在完整矩形中,\((n,m)\) 位于所有点的右下方,因此任意删除区域 \(D(x,y)\) 都包含它。

如果 Alice 第一步删掉的是其他点 \((a,b)\),那么 Bob 的后续操作可能位于它的下方但左侧,或者右侧但上方,从而不删除 \((a,b)\)。这时“两步操作”和“直接执行第二步”得到的局面未必相同,策略便无法窃取。

因此,最右下角点的选择不是巧合,而是由删除关系决定的。


七、完整结论

最终胜负为

\[\boxed{ \begin{cases} \text{Bob 获胜},&n=1\text{ 且 }m=1,\\ \text{Alice 获胜},&\text{其他情况}. \end{cases}} \]

证明可以概括为:

  • \(1\times1\) 中 Alice 被迫选择毒点,因此失败;
  • 当 \(nm>1\) 时,若假设完整矩形是必败态,Alice 可以先删最右下角点,再窃取 Bob 在新局面中的必胜操作;
  • 由于 Bob 的操作本来就会覆盖最右下角点,Alice 可以在原局面直接执行该操作,得到同一个必败态;
  • 产生矛盾,因此完整矩形一定是先手必胜态。

八、算法实现

如果题目只要求判断初始完整矩形的胜负,就不需要搜索所有阶梯形状态,只需判断棋盘是否只有毒点。

参考代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
void solve(){
	int n,m;
	cin>>n>>m;
	if(n==1&&m==1) cout<<"Bob"<<endl;
	else cout<<"Alice"<<endl;
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int T=1;
	// cin>>T;
	while(T--) solve();
	return 0;
}

如果原题包含多组测试数据,只需取消 cin>>T; 前的注释。

复杂度分析

  • 时间复杂度:\(O(1)\);
  • 空间复杂度:\(O(1)\)。

九、易错点

1. 删除区域包含选中的点

这里删除的是

\[\{(i,j)\mid i\ge x,\ j\ge y\}, \]

因此 \((x,y)\) 本身也会被删除。

2. 这是毒点规则,不是普通无子可走规则

选择 \((1,1)\) 的玩家立即失败。等价地分析安全操作时,可以把“只剩毒点”看作当前玩家的必败态。

3. 策略窃取依赖初始局面是完整矩形

对于任意阶梯形局面,未必存在一个能被所有后续操作覆盖的安全点,因此不能直接照搬这个证明。

4. 证明了必胜,不等于构造了必胜操作

如果题目要求输出完整操作方案,仅凭策略窃取的存在性证明还不够;还需要额外寻找具体策略。

5. 不需要计算 SG 函数

SG 函数通常用于普通规则下的无偏组合游戏,尤其是多个独立子游戏的异或合并。本题既有毒点规则,又只需判断完整矩形的初始胜负,策略窃取已经足够。

posted @ 2026-07-28 00:06  艾拉别哭  阅读(9)  评论(0)    收藏  举报