极小极大搜索 的个人理解(alpha-beta剪枝)

主要算法依据就是根据极大极小搜索实现的。

苦逼的是,查了两个晚上的错,原来最终是判断函数写错了。。瞬间吐血!

ps. 据说加一句 if sum < 4 printf("#####\n")会变态的快,不过懒得加了

ps. 1表示胜利,0表示平局,-1表示失败。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <cmath>
#include <utility>
#include <vector>
#include <queue>
#include <set>
#define INF 0x3f3f3f3f using namespace std; int map[4][4], sum, winx, winy;
char c; bool check(int otherplayer)
{
for(int i = 0; i < 4; i ++)
{
int tmp = 0;
for(int j = 0; j < 4; j ++)
tmp += (map[i][j] == otherplayer);
if(tmp == 4)
return 1;
}
for(int j = 0; j < 4; j ++)
{
int tmp = 0;
for(int i = 0; i < 4; i ++)
tmp += (map[i][j] == otherplayer);
if(tmp == 4)
return 1;
}
int tmp1 = 0, tmp2 = 0;
for(int i = 0; i < 4; i ++)
{
tmp1 += (map[i][i] == otherplayer);
tmp2 += (map[3-i][i] == otherplayer);
}
if(tmp1 == 4 || tmp2 == 4)
return 1;
return 0;
} int alpha_beta(int depth, int alpha, int beta)
{
int nowplayer = depth&1;
if(check(1-nowplayer))
return -1;
if(sum == 16)
return 0;
for(int i = 0; i < 4; i ++)
for(int j = 0; j < 4; j ++)
if(map[i][j] == 2)
{
map[i][j] = nowplayer;
sum ++;
int tmp = -alpha_beta(depth+1, -beta, -alpha);
map[i][j] = 2;
sum --;
if(tmp >= beta)
return beta;
if(tmp > alpha)
alpha = tmp;
if(depth == 0 && alpha == 1)
{
winx = i, winy = j;
return alpha;
}
}
return alpha;
} int main()
{
while(getchar() != '$')
{
sum = 0;
getchar();
for(int i = 0; i < 4; i ++)
for(int j = 0; j < 4; j ++)
{
c = getchar();
switch (c){
case '.':
map[i][j] = 2;
break;
case 'x':
map[i][j] = 0;
sum ++;
break;
case 'o':
map[i][j] = 1;
sum ++;
}
if(j == 3) getchar();
}
if(alpha_beta(0, -INF, INF) == 1)
printf("(%d,%d)\n", winx, winy);
else
printf("#####\n");
}
return 0;
} /* ?
....
.xo.
.ox.
....
?
o...
.ox.
.xxx
xooo
?
xxxo
oxox
....
xxxo
$ */

POJ 1568 极大极小搜索 + alpha-beta剪枝的更多相关文章

  1. 算法笔记--极大极小搜索及alpha-beta剪枝

    参考1:https://www.zhihu.com/question/27221568 参考2:https://blog.csdn.net/hzk_cpp/article/details/792757 ...

  2. 新手立体四子棋AI教程(3)——极值搜索与Alpha-Beta剪枝

    上一篇我们讲了评估函数,这一篇我们来讲讲立体四子棋的搜索函数. 一.极值搜索 极值搜索是game playing领域里非常经典的算法,它使用深度优先搜索(因为限制最大层数,所以也可以称为迭代加深搜索) ...

  3. poj 1568 Find the Winning Move 极大极小搜索

    思路:用极大极小搜索解决这样的问题很方便!! 代码如下: #include <cstdio> #include <algorithm> #define inf 10000000 ...

  4. 极大极小搜索思想+(α/β)减枝 【转自-----https://blog.csdn.net/hzk_cpp/article/details/79275772】

    极大极小搜索,即minimax搜索算法,专门用来做博弈论的问题的暴力. 多被称为对抗搜索算法. 这个搜索算法的基本思想就是分两层,一层是先手,记为a,还有一层是后手,记为b. 这个搜索是认为这a与b的 ...

  5. POJ 1568 Find the Winning Move

    Find the Winning Move 链接 题意: 4*4的棋盘,给出一个初始局面,问先手有没有必胜策略? 有的话输出第一步下在哪里,如果有多个,按(0, 0), (0, 1), (0, 2), ...

  6. 博弈论经典算法(一)——对抗搜索与Alpha-Beta剪枝

    前言 在一些复杂的博弈论题目中,每一轮操作都可能有许多决策,于是就会形成一棵庞大的博弈树. 而有一些博弈论题没有什么规律,针对这样的问题,我们就需要用一些十分玄学的算法. 例如对抗搜索. 对抗搜索简介 ...

  7. 软件发布版本区别介绍-Alpha,Beta,RC,Release

    Alpha: Alpha是内部测试版,一般不向外部发布,会有很多Bug.除非你也是测试人员,否则不建议使用. 是希腊字母的第一位,表示最初级的版本 alpha就是α,beta就是β alpha版就是比 ...

  8. 软工+C(2017第4期) Alpha/Beta换人

    // 上一篇:超链接 // 下一篇:工具和结构化 注:在一次软件工程讨论课程进度设计的过程中,出现了这个关于 Alpha/Beta换人机制的讨论,这个机制在不同学校有不同的实施,本篇积累各方观点,持续 ...

  9. 软工+C(4): Alpha/Beta换人

    // 上一篇:超链接 // 下一篇:工具和结构化 注:在一次软件工程讨论课程进度设计的过程中,出现了这个关于 Alpha/Beta换人机制的讨论,这个机制在不同学校有不同的实施,本篇积累各方观点,持续 ...

随机推荐

  1. 设置 Quick-Cocos2d-x 在 Windows 下的编译环境

    http://cn.cocos2d-x.org/tutorial/show?id=1304 设置 Quick-Cocos2d-x 在 Windows 下的编译环境 Liao Yulei2014-08- ...

  2. Extjs添加行双击事件

    var grid = new Ext.grid.GridPanel({ store: store, trackMouseOver: false, disableSelection: true, aut ...

  3. Mysql中int和varchar类型

    int类型: int bigint smallint 和 tinyint 类型,如果创建新表时没有指定 int(M) 中的M时,默认分别是 : int           -------     in ...

  4. 安装java项目开发环境

    搭建java 查看本机是否已有java 如果有,请卸载. 下载jdk 复制到服务器中 临时配置你在shell里面改,只是做了临时更改啊,一重启就没了 配置到系统的环境变量里 export JAVA_H ...

  5. scala和正则表达式常用基础知识示例

    http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html .     匹配除换行符以外的 ...

  6. 论文笔记:IRGAN——A Minimax Game for Unifying Generative and Discriminative Information

    2017 SIGIR 简单介绍 IRGAN将GAN用在信息检索(Information Retrieval)领域,通过GAN的思想将生成检索模型和判别检索模型统一起来,对于生成器采用了基于策略梯度的强 ...

  7. JMeter插件管理器

    JMeter插件管理器 来自官网:https://jmeter-plugins.org/wiki/PluginsManager/ JMeter插件管理器的想法很简单:不是手动安装各种插件,而是通过漂亮 ...

  8. HCNP学习笔记之PXE原理详解及实践

    一.PXE简介 PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服 ...

  9. 20145314郑凯杰 《Java程序设计》第8周学习总结

    20145314郑凯杰 <Java程序设计>第8周学习总结 教材学习内容总结 代码已托管 第十五章 通用API ①日志: 日志对信息安全意义重大,审计.取证.入侵检测等都会用到日志信息 使 ...

  10. bzoj 1691: [Usaco2007 Dec]挑剔的美食家

    Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 621  Solved: 280[Submit][Status][Discuss] Description ...