公平组合游戏(Impartial Combinatorial Games)

条件:

1.两名选手交替进行操作

2.两名选手局面移动的权力相同

3.当前选手的合法移动集合至于当前的局面有关,与轮到哪名选手操作、以前的任何操作、骰子的点数或者其它什么因素无关

4.如果当前选手的合法移动集合为空,则判此选手负

用状态图来理解就是:将一个游戏中的所有可能出现的状态看作是图的节点,如果一个状态可以一步转移到另一个状态,则这两个状态之间有一条有向边,设初始棋子在任意一节点上,通过有向边两名选手交替移动棋子,直至棋子不能再被移动结束。

例如:n=6,m=3的巴什博弈状态图如下:

以下讨论的是游戏的状态图为有向无环图的情况,即不存在平局

必胜点和必败点的概念:

P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败。

N点:必胜点,同上

性质:

1.P点的所有后继点都是N点

2.N点得后继点中存在P点

3.终结点一定是P点

SG函数:(针对解决公平组合游戏,不存在平局,即无环)

对于任意状态x,

                SG(x)=mex{ SG(y) |  y为x的所有后继状态 }

如果知道一个状态的SG值,我们就可以快速判断出它是P点还是N点

如果SG值等于0,那么是P点,否则是N

证明上述结论的链接:https://blog.csdn.net/philipsweng/article/details/48395375

游戏的和:

我们可以定义有向无环图游戏的和(Sum of Graph Games):设G1、G2、……、Gn是n个有向图游戏,定义游戏G是G1、G2、……、Gn的和(Sum),游戏G的移动规则是:任选一个子游戏Gi 并移动上面的棋子。

SG定理:

     SG(G)=SG(G1)^SG(G2)^…^SG(Gn)

即游戏的和的SG函数值是它的所有子游戏的SG函数值的异或。

证明上述结论的链接:https://blog.csdn.net/philipsweng/article/details/48395375

应用:

运用游戏的和,SG函数,SG定理我们可以将一个游戏分解为若干子游戏,分别求解若干子游戏的SG函数值,再将它们异或起来,得到总游戏的SG值。例如下面这个例子:

n堆石子,每次可以从第1堆石子里取1颗、2颗或3颗,可以从第2堆石子里取奇数颗,可以从第3堆及以后石子里取任意颗…… 我们可以把它看作3个子游戏,第1个子游戏只有一堆石子,每次可以取1、2、3颗,很容易看出x颗石子的局面的SG值是x%4。第2个子游戏也是只有一堆 石子,每次可以取奇数颗,经过简单的画图可以知道这个游戏有x颗石子时的SG值是x%2。第3个游戏有n-2堆石子,就是一个nim游戏。对于原游戏的每 个局面,把三个子游戏的SG值异或一下就得到了整个游戏的SG值。

经典题:

poj1848

 #include<bits/stdc++.h>using namespace std;#define maxn 1010#define N 20int S[maxn];int SG[maxn];int f[N];void getSG(){memset(SG,0,sizeof SG);for(int i=1;i<=maxn;i++){memset(S,0,sizeof S);for(int j=0;f[j]<=i&&j<=N;j++)S[SG[i-f[j]]]=1;for(int j=0;;j++){if(!S[j]){SG[i]=j;break;}}}return;}int main(){int m,n,p;f[0]=1;f[1]=1;for(int i=2;i<=20;i++){f[i]=f[i-1]+f[i-2];}getSG();while(scanf("%d%d%d",&m,&n,&p),m||n||p){if(SG[m]^SG[n]^SG[p])printf("Fibo\n");elseprintf("Nacci\n");}return 0;}

SG函数SG定理游戏的和公平组合游戏相关推荐

  1. 博弈论——公平组合游戏与SG函数

    参考自算法竞赛进阶指南 公平组合游戏与有向无环图 一个博弈游戏被称为公平组合游戏(ICG)当且仅当其同时满足3个条件 由两名玩家交替行动 游戏任意时刻可进行的操作与轮到哪名玩家无关 不能进行操作的玩家 ...

  2. 小米OJ12月常规赛“数数字”题目详解与SG函数SG定理个人理解

    本文前面的部分讲的是博弈论简单理论与SG函数SG定理的一些理解,后面对小米OJ赛题做详细剖析,最后给出代码的详细解读. 目录 博弈论 P-Position与N-Position SG函数与SG定理 S ...

  3. Trie树合并 + SG函数 ---- BZOJ4730. Alice和Bob又在玩游戏(动态开点Trie 树上全局异或标记 + 合并 + 博弈论)

    题目大题 题目大意: 解题思路: 首先我们对于子树u的SG函数为SG函数为SG函数为 ⨁是异或和\bigoplus是异或和⨁是异或和 SG[u]=mex{⨁w∈(w的父亲在u到v的路径上)SG[w]∣ ...

  4. 博弈论·公平组合游戏 学习笔记

    文章目录 公平组合游戏ICG N状态和P状态 游戏图 Sprague-Grundy SG函数 Nim游戏 游戏的和 SG定理 写在前面:发现是好久之前存在草稿里的,偶然间翻出来了,稍微完善了一下. 公 ...

  5. 博弈——ICE公平组合游戏(简单整理结论)

    ICE公平组合游戏 公平组合游戏特点 巴什博弈 威佐夫博弈 尼姆博弈 公平组合游戏特点 1.由两名玩家组成. 2.游戏的状态为有限的. 3.两人轮流走,当有一玩家不可继续时游戏结束. 巴什博弈 1.问 ...

  6. 博弈论(Nim游戏、有向图游戏之SG函数)

    这里写目录标题 经典NIM游戏 Nim游戏属于公平组合游戏ICG 有向图游戏(SG函数) Mex运算 SG函数 单个有向图(一堆石子) 求SG值(记忆化递归) 有向图游戏的和 ,(多个有向图(多堆石子 ...

  7. [博弈论] Nim游戏及SG函数(经典+台阶+集合+拆分)

    文章目录 0. 前言 1. Nim 游戏+模板题 2. 台阶 - Nim 游戏+变种题 3. Mex运算与SG函数 4. 集合 - Nim 游戏+变种题 5. 拆分 - Nim 游戏+变种题 0. 前 ...

  8. 博弈论与SG函数(Nim游戏)

    博弈论与SG函数(Nim游戏) 目录 博弈论与SG函数(Nim游戏) 游戏状态 状态图(SG图) Nim 游戏 Nim 和 SG函数 Grundy数字 组合博弈游戏 Grundy 游戏 例题 在本篇, ...

  9. 博弈论之SG函数(NIM博弈、反NIM博弈证明+例题)--POJ2311

    目录 NIM博弈: 题目: 代码: 反NIM博弈: 题目: 代码: 公平组合游戏ICG: 有向图游戏: Mex运算: SG函数: 有向图游戏的和: 定理: 题目: 代码: 参考材料: NIM博弈: 内 ...

最新文章

  1. R语言rep函数重复向量或者列表元素实战
  2. 检索图书 FindMess.java
  3. 云计算面试题及答案,云计算主要就业岗位
  4. 国内主流.NET CMS系统整理
  5. 洛谷 P1958 上学路线-dfs
  6. 用python和sympy库解决方程组问题_Python语言 SymPy库数学方程问题——线性方程组篇...
  7. 转走出MFC窗口子类化迷宫
  8. Pandas读取数据内存优化
  9. Mac OS用Anaconda安装Jupyter Notebook
  10. TCPIP详解3.8ifconfig
  11. 图说丨京东《技术重构社会供应链——未来科技趋势白皮书》
  12. 51单片机流水灯画图打板焊元件历程
  13. Pandas:用Python做日报(重构)
  14. 微信个性化菜单 java_java_java微信开发API第四步 微信自定义个性化菜单实现,微信如何实现自定义个性化菜 - phpStudy...
  15. php 应用截图,PHP应用:php使用CutyCapt实现网页截图保存的方法
  16. Python IDLE 如何设置清屏功能(清屏快捷键,亲测可用)
  17. 2021年度训练联盟热身训练赛第五场 F,G,H,I
  18. 【Python】具有异常处理功能的计算BMI值的python程序
  19. 生鲜配送管理系统软件让生鲜产品一路“鲜”到家!
  20. 网络舆情数据汇总统计的方法技巧

热门文章

  1. 西部学刊杂志西部学刊杂志社西部学刊编辑部2022年第22期目录
  2. ply补全为立方体_PLY文件格式及其解析 | 学步园
  3. 简单使用Linux工业平板(一)
  4. Linux挂载群晖NFS共享文件夹
  5. Python网络爬虫实战:《跨越星弧》TapTap玩家评论的抓取及分析
  6. 最小二乘法的计算过程
  7. PDF在线免费转换成PPT怎么操作?
  8. mysql drop view_SQL CREATE VIEW、REPLACE VIEW、 DROP VIEW 语句 | 菜鸟教程
  9. CPU卡的一个发卡详细过程
  10. HTTP代理IP的三种使用方法