下面举例说明特征值的计算方法: 每一行都可以计算出一个非负整数的特征值。举例,对于不长于 6 个 的行来说:(表示方法: * 代表一个洞, 0 代表已经被填上的洞。 )
000000 0 000 *00000 1 001 0*0000 1 001 **0000 2 010 00*000 1 001 *0*000 0 000 0**000 2 010 ***000 3 011 000*00 1 001 *00*00 0 000 0*0*00 0 000 **0*00 3 011 00**00 2 010 *0**00 3 011 0***00 3 011 ****00 1 001 0000*0 1 001 *000*0 0 000 0*00*0 0 000 **00*0 3 011 00*0*0 0 000 *0*0*0 1 001 0**0*0 3 011 ***0*0 2 010 000**0 2 010 *00**0 3 011 0*0**0 3 011 **0**0 0 000 00***0 3 011 *0***0 2 010 0****0 1 001 *****0 4 100 00000* 1 001 *0000* 0 000 0*000* 0 000 **000* 3 011 00*00* 0 000 *0*00* 1 001 0**00* 3 011 ***00* 2 010 000*0* 0 000 *00*0* 1 001 0*0*0* 1 001 **0*0* 2 010 00**0* 3 011 *0**0* 2 010 0***0* 2 010 ****0* 0 000 0000** 2 010 *000** 3 011 0*00** 3 011 **00** 0 000 00*0** 3 011 *0*0** 2 010 0**0** 0 000 ***0** 1 001 000*** 3 011 *00*** 2 010 0*0*** 2 010 **0*** 1 001 00**** 1 001 *0**** 0 000 0***** 4 100 ****** 3 011
这里,第一列是行的状态,第二列是特征值的十进制表示,第三列是 特征值的二进制表示。 整个游戏的特征值是每一行的特征值的逻辑异或的和。若其为 0,则 先走方输,反之则先走方胜。取胜的方法就是选择一种走法,使得走完后 的特征值为 0。这种走法是必然存在的。
法则一:如果一行被 0 分隔为若干个连续 * 号段,则该行的特征值是 这些 * 号子段的特征值的逻辑异或之和。例如,*0**0* 这个串,被 0 分隔 为三个子串:*,**,*,它们的特征值分别为 1,2,1,因此整个串的特征值 是 1^2^1 = 2。 法则二:连续 * 号的特征值计算方法。 列出按照游戏方法对这行进行 操作后所有可能的情况,这些操作后形成的串成为后继串。对每一个后继串 计算特征值,这些特征值形成了一个集合,不在这个集合中的最小非负整数 就是要求的特征值。 例如,** 这个串,可以按照游戏规则形成 *0,0*,00 三个后继串,他们的特征值分别为 1,1,0,因此不在这个集合中的非负的 最小整数是 2,就是 ** 的特征值。
由 法则一 和 法则二 可以计算出 0 ~ n 的特征值。 |