参考自:
人工智能之博弈二、最大最小值方法
象棋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. 深度|​揭秘5G+AI时代的机器人世界!七大核心技术改变人类生活!
  2. vue function (i)第一次点击不执行_vue下$nextTick及原理浅析
  3. Linux LVM过程问题
  4. python动态图片转字符画_【小工具】使用python将图片转彩色字符画
  5. jQuery.extend函数详细用法![转]
  6. 关于软件比赛:想当太子,就不要陪别人读书
  7. 明日服务器中断,明日之后服务器连接中断 无法登陆解决办法[多图]
  8. 通信软件开发与应用结业报告
  9. 【转载】白素贞的身世之谜
  10. navigateTo和navigateBack的使用
  11. NLP工具——NLTK 安装及使用
  12. OpenJDK源码赏析之二:java虚拟机启动流程到首函数调用全流程
  13. IntelliJ IDEA设置方法注释模板并解决入参和返回值为空问题
  14. 项目总结(打开一个新页面下载exsel表格或者文档模板)
  15. 中国特有的狸花猫有多强大?
  16. itunes安装苹果测试包总是“正在安装”
  17. CSS3之正方体旋转
  18. 简析银行核心系统24小时设计
  19. ConfigurationChanged流程梳理(屏幕旋转、语言及字体切换)
  20. Java 将表格数据导入word文档中

热门文章

  1. 三款红米手机搭载Elliptic Labs智能传感技术
  2. 8.19! 今天我有18生日,点击阅读或顶部 尾随幸运的一天!生日知识!↓——【Badboy】...
  3. firefox快捷键切换窗口功能
  4. Activiti7学习笔记、非常详细 | 进阶篇
  5. java系列之redis基础
  6. java与c的交互,java与c/c++之间的数据交互,java交互
  7. python爬上市公司信息_实战项目 1:5 行代码爬取国内所有上市公司信息
  8. android遥控器管理,Android 遥控器适配
  9. java swing 毛玻璃_实时、动态的毛玻璃(aero)效果,javaSwing 实现的,用的是高斯模糊算法...
  10. 如何在Win10系统下的IntelliJ IDEA 2018.3.5下载与安装以及激活教程