首先,定义在位置P被第一手击败的Nx第一手胜利状态
操作方法:反向转移
同一状态下的几个不同位置等效于无
对于ICG游戏,游戏的每种情况都可以表示为一个点。
并且如果存在情况i和情况j,并且j是i的后继者(即情况i可以转换为情况j),则使用从iaj开始的有向边,该iaj连接表示情况i的点。情况j。
接下来,整个游戏可以表示为有向无环图。根据ICG博弈的定义,我们可以看到无法持续的局面是局面的结束,即局面P(第一输家)。
在上图中,所有度数为0的点都可以标记为P点。
然后,根据ICG游戏的两种性质,可以将所有分数的引入反转为P或N。
对于可能发生游戏的情况x,如下定义其sg值:(1)如果当前状态x完成,则sg值为0。
(2)如果当前情况x不是最终的,则其值sg为:sg(x)= mex{sg(y)| y是x的后继}。
Mex{a[i]}表示a中未出现的最小非负整数。
示例:mex{0,1,2}= 3,mex{1,2}= 0,mex{0,1,3}= 2当使用sg函数表示上述图像时,的x是阶数P和sg(x)= 0;否则,sg(x)0。
相同的值sg也满足N和P之间的转换率。必须有一个状态x,其sg(x)为0,随后的状态y,sg(y)= 0。
对于sg(x)= 0的情况x,x的所有后续情况均为y,sg(y)0。
从前面的推理中,您可以看到您还可以编写可以在N和P位置编写的sg游戏。
sg函数还有一个非常有用的定理,称为sg定理。在多个单独的游戏中,X = x[1。
n]每次您只能更改单个游戏的一种情况。
总情况sg值等于这些单个游戏sg值的XOR和。
首先,定义mex(最小排除)操作,这是应用于集合的操作。这表示不属于此集合的最小非负整数。
例如,mex{0,1,2,4}= 3,mex{2,3,5}= 0,mex{}= 0。
对于特定的有向无环图,为图的每个顶点定义一个Sprague-Grundy函数g,如下所示:g(x)= mex{g(y)| y是x的后继者。其中g(x)sg[x]
例如,如果您遇到一个石头问题,并且您有一堆n块石头,而您只能拿到{1,3,4}石头,那么您首先赢得石头就赢了,那么每个数字的SG值是多少??
Sg[0]= 0,f[]={1,3,4},
如果x = 1,则可以得到1-f{1}块石头,剩下的{0},mex{sg[0]}={0},sg[1]= 1。
如果x = 2,则可以获得2-f{1}的石头,{1}仍然存在,mex{sg[1]}={1},sg[2]= 0;
如果x = 3,3-f{1,3}石头,其余{2,0},mex{sg[2],sg[0]}={0,0},则sg[3]=1;
如果x = 4,则可以获得4-f{1,3,4}块石头,其余{3,1,0},mex{sg[3],sg[1],sg[0]}={1,1,0},sg[4]= 2;
如果x = 5,则5-f{1,3,4}石头,剩余的{4,2,1},mex{sg[4],sg[2],sg[1]}={2,0.1},Sg[5]= 3;
等等
X012345678。
Sg[x]010123201。
SG值从1-n的范围内计算。
f(存储可以执行的步骤数。f[0]表示可以执行的步数)
f[]必须从最小到最大排序
1)
可选的步数是1?M的连续整数,可以直接获得。SG(x)= x%(m +1);
2)
可选步骤的数量是任意的。SG(x)= x;
3)
可选的步数是由GetSG()计算的一系列离散数。
