【问题标题】:How to solve the following graph game如何解决以下图形游戏
【发布时间】:2010-07-19 08:46:09
【问题描述】:

在无向图 G 上考虑以下游戏。有两个玩家,一个红色玩家 R 和一个蓝色玩家 B。最初 G 的所有边都是无色的。两个玩家交替用他们的颜色为 G 的未着色边缘着色,直到所有边缘都着色。 B 的目标是最终蓝色边形成 G 的连通生成子图。G 的连通生成子图是包含图 G 的所有顶点的连通子图。R 的目标是防止 B从实现他的目标。

假设 R 开始游戏。假设两个玩家都以最聪明的方式玩。你的任务是确定 B 是否会赢得比赛。

输入: 每个测试用例以一行两个整数 n ( 1

输出: 对于每个测试用例,打印一行“YES”或“NO”,表示 B 是否会赢得比赛。

例子:

3 4

0 1

1 2

2 0

0 2

输出:是

我的想法: 如果我们能在图中找到两棵不相交的生成树,那么玩家 B 就赢了。否则,A获胜。 “两棵不相交的生成树”表示两棵树的边集不相交

不知道你能否证明或反驳我的想法

【问题讨论】:

  • 如果图是无向的,为什么你同时拥有边 0 22 0
  • 这意味着两个顶点之间可能有两条或多条边
  • 啊,有道理。好问题。是来自在线评委(SPOJ、UVA 等)吗?如果是,你介意链接到它吗?
  • 在 Prolog 中进行暴力破解并不难,但性能会很糟糕。有人认为这有 PTIME 解决方案吗?
  • 我正在考虑某种优化的蛮力算法。 10 个节点和 30 个边让我认为问题制定者期望某种蛮力解决方案。

标签: algorithm theory


【解决方案1】:

你的想法是正确的。在这里找到证明: http://www.cadmo.ethz.ch/education/lectures/FS08/graph_algo/solution01.pdf

如果您搜索“连接游戏”或“创客游戏”,您应该会发现一些更有趣的问题和算法。

【讨论】:

  • 谢谢。但我想知道如何找到图的两个不相交的生成树
  • reports.stanford.edu/pub/cstr/reports/cs/tr/74/455/… 给出了一种基于深度优先搜索的算法。我只浏览了这篇论文,它有 40 多页,但算法本身似乎相当简单。不知道有没有更简单的方法...
  • 哦,对不起。我试图链接到这篇论文:springerlink.com/index/K5633403J221763P.pdf 但是 a) springer 似乎失败了 b) 不知道是否需要订阅什么订阅才能在线访问它。我认为我作为替换提供的链接确实仅适用于有向图。我很确定另一篇 tarjan 论文(上面的 springer 链接)涉及无向图(但显然现在无法检查 springer 已关闭)
  • 酷,你已经实现了吗?它在现实生活中有多快?我猜你确保每次有一个独立于你开始的生成树时都会找到一个集合。这对我来说并不是很明显(但无论如何我对图论不太擅长......)
【解决方案2】:

所以我认为R应该遵循以下策略:

Find the node with least degree (uncolored edges) (which does not have any Blue colored Edge)
call it N
if degree of N (uncolored edges) is 1 then R wins, bye bye
Find its adjacent nodes {N1,...,Nk}
Pick up M from {N1,...,Nk} such that degree (uncolored) of M (and M does not have any blue colored edge) is the least among the set
Color the edge Connecting from M to N
Repeat this.

【讨论】:

  • 您如何确定您的策略是否在给定游戏中获胜?问题想知道 B 是否有获胜策略。
  • 所以这是 R 赢的策略,这意味着如果 R 输了,B 就赢了,反之亦然。
  • if degree of N (uncolored edges) is 1 then R wins, bye bye 为什么在这种情况下 R 会赢? B 可以选择其他保持其子图连接的节点。
  • 这不是 R 的获胜策略:考虑两个顶点标记为 ABC 的三角形,其中弧 AB 上有两条边,弧 BC 上有一条边,一个三角形在 AC 上有一条边,另外两个。复制它并通过它们的 A 顶点之间的边连接两个三角形。 R 有一个通过断开两个三角形的获胜策略:您的算法要求不要这样做,而 B 有一个针对您的算法的获胜策略。
  • @IVlad: N 没有任何蓝色边缘(根据第一行),然后如果 N 的度数(未着色边缘)为 1,则 R 可以简单地将其着色为红色,然后这个节点不能有蓝色边缘,这会将其排除在最终子图之外。因此红色获胜。
猜你喜欢
  • 2010-11-14
  • 2015-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-27
  • 1970-01-01
  • 2020-07-16
相关资源
最近更新 更多