参考自:
人工智能之博弈二、最大最小值方法
象棋AI博弈算法(最大值最小值算法)

主要思想其实就还是暴搜,不过可以在搜索阶段进行剪枝+优化。

这个算法可以在竞赛中用于一些博弈题的打表,然后找规律。

有这么一个博弈题:

Take Apples

然后就如何用这个算法进行打表。

定义必赢态为先手必赢,必输态为先手必输。以下所说的必赢、必输都是对于先手而言。

首先,如何找到一个必赢态,假设目前是先手要进行操作,可以有k种操作,只有k种操作中有一个必赢态,那么他肯定选这个必赢态就行选择,那么对于先手这个必赢态是如何确定的呢,是后手在这个必赢态下(先手过了就后手,可以抽象为一棵树的节点)进行下一次操作的所有操作都是导致先手必赢,即后手怎么选都不能赢。直到最后某一个能一次拿完。

code

//因为每一轮是两个选手都要操作完之后才结束,所以get_max相当于是先手在操作,get_min是后手。
//1 表示先手赢   0表示先手输
int get_max(int n,int k){//返回的是先手是否赢或者输if(n<=k){//如果小于k,那么先手赢。return 1;}int maxx = -1;//相当于只要有一个1,那么就赢,与取max等价。for(int i = 1;i <= k;++i){maxx = max(maxx,get_min(n-i,k));}return maxx;
}int get_min(int n,int k){if(n<=k){//如果小于k,那么后手赢,即先手输。return 0;}int minn = 2;//必须全都是1,先手才能赢,与取min等价。for(int i = 1;i <= k;++i){minn = min(minn,get_max(n-i,k+1));}return minn;
}

最大值最小值算法(象棋博弈)相关推荐

  1. C++极值minmax最大值最小值算法(附完整源码)

    极值minmax最大值最小值算法 极值minmax最大值最小值算法的完整源码(定义,实现,main函数测试) 极值minmax最大值最小值算法的完整源码(定义,实现,main函数测试) #includ ...

  2. 求两个数中的最大值最小值算法

    给定两个数,用数学运算求出它们两中的最大的数和最小的数,设这两个数为a,b,最大值为max,最小值为min,则有 max = ((a+b)+|a-b|) / 2 ; min = ((a+b)-|a-b ...

  3. java最大值最小值_java算法-最大值、最小值

    java求最大值的三种方法 一般方法: public class maxtest { public static void main(String[] args) { //############## ...

  4. JavaScript 数组排序及查找数组中最大值最小值方法

    JavaScript 数组排序方法及查找最大值最小值方法 1. sort()方法排序 1.1 方法介绍 1.2 语法:arr.sort([compareFunction]) 1.3 参数说明 1.4 ...

  5. mysql查找最大值最小值_查找两个8位数字的最大值| 8086微处理器

    mysql查找最大值最小值 Problem statement: 问题陈述: To find maximum of two 8-bit numbers using 8086 Microprocesso ...

  6. R语言max函数min函数计算各种数据对象最大值最小值实战

    R语言max函数min函数计算各种数据对象最大值最小值实战 目录 R语言max函数min函数计算各种数据对象最大值最小值实战 #基本语法

  7. 均值定理最大值最小值公式_如何理解中值定理?三大微分中值定理的几何意义及其证明介绍。...

    本文是为了下篇文章<三大微分中值定理的应用-经典例题>作基础准备 本文参考谢惠民<数学分析习题课讲义>和裴礼文<数学分析中的典型问题与方法>中的内容.已看过的同学可 ...

  8. python求最大值最小值_Python求可变参数的最大值最小值以及参数个数

    求可变参数的最大值最小值以及参数个数 简介: 首先要做这个题,我们要使用函数来解决,这就要求我们要掌握函数的定义以及函数的调用.函数是一段具有特定功能的.可重用的,用来实现单一,或相关联功能的代码段. ...

  9. 求数组的最大值php,求PHP数组最大值,最小值的代码

    求PHP数组最大值,最小值的代码,需要的朋友可以参考下. 代码如下: $fruits = array("155::vbscript::http://www.jb51.net/list/lis ...

最新文章

  1. 看我如何作死 | 将CPU、IO打爆
  2. linux 删除含有关键词的文件_linux 连个文件都删除不了,什么鬼!
  3. python字典转字符串后里面的冒号还在吗_Python字典、字符串及列表的相互转换
  4. iptables中state模块的连接状态
  5. Intellij+maven:jar包冲突的解决方法(Hbase和Guava的冲突)
  6. Module Zero之用户管理
  7. 使用Spring WS创建合同优先的Web服务
  8. 独立线性度 最佳直线
  9. Cron表达式、定时任务
  10. Windows服务器放多个网站,测试无数次终于成功了,Windows服务器同时安装多个版本的MySQL的方法!...
  11. provide sth for sb; provide sb with sth
  12. Atitit.导出excel功能的设计 与解决方案
  13. 高等数学学习笔记——第九讲——数列收敛的判定方法
  14. 基于Python网易云音乐歌词爬取
  15. window.print() 实现A4纸张打图片分页,解决预览首页空白页、打印多出一张空白页问题
  16. IT行业现在的就业前景怎么样?
  17. 制作水晶报表基本步骤
  18. UnityPlayerActivity详解
  19. rqt teb参数动态调试工具_teb
  20. 操作无法完成因为文件已在syayem中打开怎么处理删除文件。

热门文章

  1. matlab火箭升空,火箭升空原理
  2. 网站服务器采用CDN+专线 ,完美加速
  3. 【C语言快速上手】带你了解C语言,零基础入门①
  4. 80老翁谈人生(156):老翁为何笃爱互联网?
  5. 萘酞菁(VONcs),齐岳生物供应各种酞菁化合物材料
  6. 只在此山中,云深不知处
  7. javascript获取某一年至当年的年份数组的方法
  8. dsf5.0组件相关
  9. ImGUI 1.87 绘制D3D外部菜单
  10. 编程之路第11天:解决此前截屏权限需要手动点击确认问题(打开双线程)