巴什博弈
问题类型: 只有一堆n个物品,两个人从轮流中取出(1~m)个,最后取光者得胜;
bool Bash_Game(int n,int m)//是否先手有必赢策略
{
return n%(m+1)!=0;
}
尼姆博弈
问题类型:有N堆,每堆有Ni>0个石子,取任意的石子,最后取光者得胜;
int f[i];//从1到n到记录每堆石子个数
bool Nimm_Game(int n)//是否先手有必赢策略
{
int flag=0;
for(int i=1;i<=n;i++)flag^=f[i];
return flag;
}
威佐夫博弈
问题类型:有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,并且每次至少取一个,最后取光者得胜;
bool Wythoff Game(int a,int b){//是否先手有必赢策略
if(a>b)swap(a,b);
double k=(sqrt(5.0)-1.0)/2.0;//黄金分割
int j=a*k;
if(a!=j*(int)(k+1))j++;
return a+j!=b;
}