Nim博弈游戏
給定n堆石子,每次每人能從一堆石子中取若干個石子(不能不取),最后不能取石子者敗
對于這個游戲,我們要判斷的是,給定局勢下,先手者勝還是敗
設先手勝的局勢為N-postion,先手敗的局勢為P-postion
可以移動到P-postion的局勢叫做N-postion,只能移動到N-postion的局勢叫做P-postion。
1、只有一堆的情況下先手勝
2、只有兩堆
a、數目相等的局勢,先手敗,因為不管先手怎么取,后手都能在另一堆中復制先手的取法
b、數目不相等的局勢,先手勝,先手可以在石子多的那一堆取走一定的石子,使得兩堆的石子數相等,然后參考情況a分析,可知先手勝
3、兩堆以上的情況。將局勢分為兩個子局勢x,y
那么來分析一下局勢的加法與異或之間的關系,
將局勢分為兩個子局勢n和m,如果兩個子局勢相同,則表示n==m,將局勢如果可以先手勝利,成為n勝或m勝
局勢異或等于0,表示先手敗,不等于0,表示先手勝
若n勝m勝 如果n==m ,n^m==0, 如果n!=m, n^m!=0 ,說明該情況下的局勢加法滿足異或
若n勝m負 先手者在n局勢先手獲得勝利,然后使得后手者在m局勢先手,獲得失敗,所以先手勝 ?n!=0,m==0, n^m!=0,說明該情況下的局勢加法滿足異或
若n負m勝 同上
若n負m負 先手者在n局勢取得失敗,然后又在m局勢先手取得使得,所以最終失敗。 ? n==0,m==0,n^m==0,?說明該情況下的局勢加法滿足異或
所以Nim游戲的判斷是否先手勝就變成了判斷n堆石子的異或是否不等于0
那么怎么獲得必勝策略是怎么走的呢?即將某堆得石子取走k個,使得的石子異或等于0
設有n堆石子,a1,a2,...ai...an
對于ai,取得另外n-1堆得石子的異或s ?
如果 ai > s ? , ?那么k= ai - s, ?這樣子 (ai-k)==s ?即 ai^s==0
轉載于:https://www.cnblogs.com/justPassBy/p/4366524.html
總結
- 上一篇: PHP中生成UUID
- 下一篇: JQuery Show()的几种效果