其他分享
首页 > 其他分享> > 博弈论

博弈论

作者:互联网

博弈论

1.必胜点和必败点和sg函数定义。

image-20220713130349218

image-20220713151439691

2.单个取石子游戏。

sg值的定义就是找到一个不等于后继节点的最小非负整数。

光建就是sg函数。sg[x]=0就是p点,否则就是N点。下面是单个取石子游戏sg函数的计算方法。

image-20220621105815765

第三条求法。利用搜索求解就好。

int f[MAXN],sg[MAXN];//f是可以取得石子数
bool vis[MAXN];//代表后继中有哪些点取了,找到哪个最小的非负整数。
void getSG(int n)//求n的sg值
{
sort(f+1,f+1+n);
memset(sg,0,sizeof(sg));
for (int i=1; i<=n; i++)
{
memset(vis,0,sizeof(vis));
for (int j=1; f[j]<=i; j++)//f排序是为了让每一种取法都循环到
            //if(i-f[j]<0)break;//小于0就不用了//这个条件上面已经有了
vis[sg[i-f[j]]]=1;
for (int j=0; j<=n; j++)
{
if (vis[j]==0)
{
sg[i]=j; break;
}
}
}
}

3.组合取石子游戏

image-20220713151339816

image-20220713133902449

 

这被lcy老师称为组合游戏的并,只需要求出每个单个游戏的sg值然后异或起来就可以判断这个点是输还是赢。sg值为0是P点。为1则是N点。

4.Anti-nim

 

标签:石子,游戏,int,博弈论,vis,MAXN,sg
来源: https://www.cnblogs.com/silky----player/p/16519247.html