解决图形游戏

时间:2014-03-24 19:30:44

标签: algorithm graph bipartite game-theory

我在编程竞赛(Andrew Stankevich Contest 21)中遇到类似游戏的问题时,我已经挣扎了一段时间:

  

尼克和彼得喜欢玩以下游戏[...]。他们   在一张纸上绘制一个无向二分图G,并将一个标记放在其顶点之一上。之后他们轮流行动。尼克先行动。

     

移动包括沿图形边缘移动令牌。之后是令牌所在的顶点   在移动之前,以及与其相关的所有边缘,将从图形中移除。拥有的玩家   没有有效的动作会失去游戏。

给出了图表,现在的任务是找到给定的起始节点,如果两个玩家都以最佳方式玩,则起始玩家是赢还是输。总结

  • Bipartite graph
  • 我们获得了开始节点(比如在左侧)
  • 我们轮流移动,移动包括跟随边缘,但我们无法访问已访问过的节点
  • 无法移动的玩家失去

由于图表是二分图,Nick(第一个玩家)将始终从左侧移除一个节点,Peter将始终从右侧移除一个节点。

图表最多可以有1000个节点(每边最多500个)和50000个边缘,因此需要一个很好的多项式时间算法(这里的时间限制是2秒来解决所有起始位置,但我认为我们可以在不同的起始位置之间分享大量信息。

我非常确定这可以减少到某种顶点覆盖或打包问题,因为图表是二分的,但我找不到与其中任何一个相关的策略。

我知道特殊情况的解决方案:让我们说方面有 n 1 n 2 顶点。如果matching的大小 min(n 1 ,n 2 ,如果较小的一方的玩家开始,比存在一个获胜策略:他必须遵循匹配的边缘并自动获胜。

有什么想法吗?

2 个答案:

答案 0 :(得分:9)

命题。 Nick(第一个玩家)从顶点v开始获胜,如果此顶点属于给定图形的每个可能的最大匹配。我们将分两步证明这一点。

  1. 如果没有v存在最大匹配,则Nick会失败 实际上,由于匹配是最大的,因此没有来自v的扩充路径。这意味着来自v的每个简单的奇数路径都可以通过匹配的边缘延长。就我们的问题而言,这意味着每次尼克的行动后,彼得都可以继续比赛。

  2. 如果没有v没有最大匹配,Nick就会胜出 考虑任何可能的最大匹配。沿着此匹配的边缘从v移动到,例如u。现在,初始匹配减去边u-v是剩余图的最大匹配,不包括u。正如我们从第1步所知,现在移动的玩家(这是彼得)是亏本的。


  3. 对于实现,我们可以首先使用简单的算法(see here构建一个示例实现)在O(VE)中构建最大匹配 - 结果通用名称是Kuhn的扩充路径算法。

    之后,保持最大匹配并查看每个顶点。如果顶点(比如说v)当前不在匹配中,那么Nick就输了。如果是,则从匹配中删除相应的边缘,例如v-u,暂时禁止顶点v,并在O(E)中搜索来自u的扩充路径。如果你没有找到这样的路径,尼克会赢,你必须恢复你删除的边缘。否则,尼克再次失败,新的最大匹配可以保持不变。总运行时间再次为O(VE)。

答案 1 :(得分:4)

可爱的问题。我相信预期的解决方案是计算最大匹配,然后确定哪些左顶点属于每个最大匹配。这是第一名球员的胜利。

获胜策略是选择属于最大匹配的边。如果起始顶点v属于每个最大匹配,则由玩家1选择的边e的另一个端点w不属于图的每个最大匹配减去v(因为v属于每个最大匹配,最大基数)删除后匹配减少一个,所以由于e属于某个最大匹配M,我们在新图中M-e最大,并且e的另一个端点不匹配)。相反,如果存在v不属于的最大匹配,则其所有邻居w都属于图的所有最大匹配减去v(否则,找到没有w的最大匹配并且将边从v添加到w,相矛盾当我们删除v)时,假设匹配的最大基数没有减少。