SG函數的計算方法:函數
一個局面的SG爲mex{後繼局面的SG}遊戲
mex運算爲集合中沒出現的最小的天然數二進制
幾個局面的和的SG爲單個的SG亦或方法
SG不爲0時先手必勝,SG爲0時後手必勝im
1.Nim Game集合
最爲經典移動
n堆石子,每次能夠從一堆裏面取任意個石子cas
對於一堆石子,SG函數就是石子數數字
整個遊戲的SG函數是每一堆石子的SG函數的亦或和
必勝:SG不爲0
必敗:SG爲0
2.Bash Game
每次最多取m個石子,其餘同Nim
一堆石子的SG函數爲石子數mod(m+1)
整個遊戲的SG函數是每一堆石子的SG函數的亦或和
必勝:SG不爲0
必敗:SG爲0
3.Nimk Game
每次最多能夠同時從k堆石子進行操做,這k堆能夠取不一樣數量的石子
一堆石子的SG函數爲石子數
對每個二進制位單獨算,求SG函數每個二進制位1的個數mod(k+1),若是都爲0,則必敗,不然必勝
證實:
對於必敗態無論怎麼走都只能走到必勝態
對於變化的SG的最高位,你至少變化爲1,最多變化爲k,因此這一位1的個數不可能mod(k+1)仍是爲0
對於必勝態咱們確定能夠找到一種方法走到必敗態
咱們從高位往低位作,記s爲這一位能夠隨意填值的數字個數(若是把某一位從1變成0,那麼更低位就能隨便取值了)
假設咱們如今作到第k位,記n爲除了能隨便取值的s位之外這一位1的個數mod(k+1)
若是n+s<=k,那麼很簡單,咱們取出n個第k位爲1的讓這些數字的第k位變成0,那s個數字這一位也變成0,而後s+=n
若是n+s>k,即n+s>=k+1,那麼s>=k+1-n,咱們在s中間取k+1-n個變爲1,其餘變爲0就能夠知足條件了
4.Anti-Nim Game
不能取石子的一方獲勝
必勝:SG不爲0且至少有一堆石子數大於0,SG爲0且每一堆石子數都爲1
必敗:其他爲必敗
5.Staircase Nim
階梯博弈
每次能夠從一個階梯上拿掉任意數量石子放到下一層階梯,不能操做的爲輸
SG函數爲奇數階梯上的石子的亦或和
若是移動偶數層的石子到奇數層,對手必定能夠繼續移動這些石子到偶數層,使得其SG不變
6.Wythoff Game
有兩堆石子,每次能夠從一堆或者兩堆裏拿走同樣數目的石子,不能取的爲輸
必敗態爲(1,2)(3,5)(4,7)(6,10)...
差爲1,2,3,4.....每一對數的第一個數爲前面沒出現的最小的正整數
7.Take & Break
每次能夠把一堆石子分紅兩堆甚至多堆不爲0的石子,不能操做的爲輸
暴力計算SG
8.樹上刪邊遊戲
給定根節點,每次能夠刪掉一條邊,不與根節點相連的部分刪除
葉子節點SG爲0,其餘節點的SG函數爲子樹SG+1的亦或和
證實:
將子樹SG+1看作石子數(咱們能夠定義沒有節點的圖的SG爲-1),而後就變成了取石子游戲
9.無向圖刪邊
規則同樹上刪邊遊戲
結論:把奇環縮成一個點加一條新邊,把偶環縮成一個點,不影響SG,而後套用樹上刪邊遊戲
10.翻硬幣遊戲
n枚硬幣排成一排,有的正面朝上,有的反面朝上。
遊戲者根據某些約束翻硬幣(如:每次只能翻一或兩枚,或者每次只能翻連續的幾枚),但他所翻動的硬幣中,最右邊的必須是從正面翻到反面。
誰不能翻誰輸。
須要先開動腦筋把遊戲轉化爲其餘的取石子游戲之類的,而後用以下定理解決:
局面的 SG 值等於局面中每一個正面朝上的棋子單一存在時的 SG 值的異或和。
證實的基本套路:
必勝局面存在一個操做到達必敗局面,必敗局面不管怎麼操做都會到必勝局面