1

给定的是一排最多 30 颗可以是黑色或白色的石头。比赛开始时不允许有空隙,但可以少于 30 颗棋子。目标是移除所有的石头。只有黑色的石头可以被移除,如果一颗石头被移除,它的邻居会改变颜色。如果移除的石头在中间,就会产生一个无法再填充的空隙;移除石头后,该石头的邻居不被视为邻居。

现在,我创建了一个使用蛮力解决这个游戏的程序。我得出的结论是,只有在有任何黑子(显然)并且黑子的数量是奇数的情况下,该游戏才可以解决。此外,如果黑子的数量是奇数,则可以通过递归删除该行的第一个黑子来解决游戏。

我的问题是我无法证明黑子的数量一定是奇数并且移除第一块石头就能解决游戏的条件。我怎样才能正确地证明这个算法?

我已经尝试过使用归纳法,但我被困住了:

行(a,b) = a*黑色 + b*白色

RemoveFirstBlack(Row(1, b)) = RemoveFirstBlack(black + b*white) = 0(如果 a=1 或 n = 0,其中 a=2n+1 且 n 为整数)

假设 RemoveFirstBlack(Row(k*a, b)) = RemoveFirstBlack(k*a*black + b*white) = 0 其中 k = 2p + 1 且 p 为整数。

RemoveFirstBlack(Row((k+1)*a, b)) = RemoveFirstBlack((k+1)*a*black + b*white) = RemoveFirstBlack((2(p+1)(2n+1))*black + b*white) = RemoveFirstBlack(2(p+1)*a*black + b*white) = 0?

在此先感谢您的任何指点!

4

2 回答 2

2

我建议您尝试将两个动作视为一个动作。(即 30 块石头在 15 步中被移除。)

这将允许您证明拥有奇数或偶数黑子的属性在整个游戏中是不变的。证明草图如下:

基本情况:剩下两块石头。奇数个黑人。两块石头都可以在一个双重移动中移除:

b w       -> _ b        ->  _ _
w b       -> b _        ->  _ _

对于四颗或更多的石头,列出各种不同的可能前缀,其中O和分别E代表带有奇数偶数黑色的石头的后缀序列。

这里有两个案例可以帮助您入门:

b b w b E  -> _ w b b E  ->  _ w _ w E
b b w w O  -> _ w b w O  ->  _ b _ b O
....

在每种情况下,您都会注意到生成的序列(_ w _ w O例如)包含奇数个黑人。

因为如果一个序列由一颗石头组成,并且石头的数量是奇数,那么那颗石头必然是黑色的,这意味着最后一块石头也可以被移除。


注意到你还想证明如果黑色石头的数量是偶数是不可能的。这同样容易。基本情况 (b bw w) 是不可能解决的,并且由于每个双重移动都会移除偶数个黑子,如果你从偶数开始你就不走运了:-)

于 2012-03-14T13:07:08.967 回答
2

假设我们有一个可以在不拆分组的情况下解决的石头组(如果您必须拆分组,那么您实际上有两个不需要拆分的组)。从组中移除的最后一颗棋子必须是单黑 [B]。到达[B]的唯一途径是通过[WB],没有其他途径。要到达 [WB],您需要 [BBB] 或 [WWB]。模式从这里出现。到达 [xxW] 的唯一方法是通过 [xxBB],而到达 [xxB] 的唯一方法是通过 [xxWB]。在所有这些转换中,奇偶性不变,最终黑子的数量是奇数(一个),因此单个不可拆分组的奇偶性必须是奇数

假设解决方案需要将一个组拆分为两个不可拆分的子组。我们已经得出结论,这两个子组必须具有奇等价。如果我们排除将过渡到新状态的黑色石头,那么这两组实际上有偶数个黑色。如果我们添加它们,并添加将进行转换的黑子,我们可以得出结论,通过将其拆分为两个不可拆分组来解决的组也必须具有奇数个黑子

对单分裂组使用归纳法,我们可以得出结论,任何组都必须有奇数个黑人。

原始问题的解决方案不需要蛮力。只需选择您出现的第一块黑色石头。

于 2012-03-14T14:36:38.043 回答