巴什博弈
只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。<mark>最后取光者胜</mark>。
n%(m+1)==0,则后手胜利
反巴什博弈
只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。<mark>最后取光者输</mark>
(n-1)%(m+1)==0,则后手胜利
Nim博弈
有若干堆石子,每堆石子的数量都是有限的,合法的移动是“选择一堆石子并拿走若干颗(不能不拿)”,<mark>最后取光者胜</mark>。
a1 ^ a2 ^ a3 ^…… ^ an==0,则后手胜利
反Nim博弈
有若干堆石子,每堆石子的数量都是有限的,合法的移动是“选择一堆石子并拿走若干颗(不能不拿)”,<mark>最后取光者输</mark>。
a1=a2=……=an=1,a1 ^ a2 ^ …… ^ an==0, 先手必胜
存在ai>1,a1 ^ a2 ^…… ^ an不等于0,先手必胜
威佐夫博弈(Wythoff’s game)
有两堆各若干个物品,两个人轮流从任一堆取至少一个或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,<mark>最后取光者胜</mark>。
设两堆物品的初始个数分别为n,m
double k=(1+sqrt(5.0))/2;
if(n<m) swap(n,m);
n=(int)(k*(n-m));
if(n==m) printf("后手胜\n");
else printf("先手胜\n");
斐波那契博弈
有一堆个数为n的石子,游戏双方轮流取石子,满足:
(1)先手不能在第一次把所有的石子取完;
(2)之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍)。 约定取走最后一个石子的人为赢家。
当n为Fibonacci数时,先手必败。