poj 1568 Find the Winning Move 极大极小搜索
思路:用极大极小搜索解决这样的问题很方便!!
代码如下:
#include <cstdio>
#include <algorithm>
#define inf 100000000
using namespace std;
char str[][];
int x,y,num;
bool ok(int x,int y) //判断是否胜
{
int i;
for(i=;i<;i++) //(x,y)所在的行
if(str[x][i]!=str[x][y]) break;
if(i==) return ;
for(i=;i<;i++) //(x,y)所在的列
if(str[i][y]!=str[x][y]) break;
if(i==) return ;
if(x==y){ //主对角线
for(i=;i<;i++)
if(str[i][i]!=str[x][y]) break;
if(i==) return ;
return ;
}
if(x+y==){ //副对角线
for(i=;i<;i++)
if(str[i][-i]!=str[x][y]) break;
if(i==) return ;
return ;
}
return ;
}
int minimax(int x,int y,int ma);
int maxmini(int x,int y,int mi)
{
int ma=-inf;
if(ok(x,y)) return ma;
if(num==) return ;
for(int i=;i<;i++)
for(int j=;j<;j++)
if(str[i][j]=='.'){
str[i][j]='x';
num++;
int t=minimax(i,j,ma);
num--;
str[i][j]='.';
ma=max(ma,t);
if(ma>=mi) return ma;
}
return ma;
}
int minimax(int x,int y,int ma)
{
int mi=inf;
if(ok(x,y)) return mi;
if(num==) return ;
for(int i=;i<;i++)
for(int j=;j<;j++)
if(str[i][j]=='.'){
str[i][j]='o';
num++;
int t=maxmini(i,j,mi);
num--;
str[i][j]='.';
mi=min(mi,t);
if(mi<=ma) return mi;
}
return mi;
}
bool cal()
{
int ma=-inf;
for(int i = ;i<;i++)
for(int j = ;j<;j++)
if(str[i][j]=='.'){
str[i][j]='x';
num++;
int t = minimax(i,j,ma);
num--;
str[i][j]='.';
ma=max(t,ma);
if(ma==inf){
x=i;
y=j;
return ;
}
}
return ;
}
int main()
{
char ch[];
// freopen("1.txt","r",stdin);
while(scanf("%s",ch)&&ch[]!='$'){
num = ;
for(int i = ;i < ;i++){
scanf("%s",str[i]);
for(int j = ;j < ;j++)
num += (str[i][j]!='.');
}
if(num <= ){
printf("#####\n");
continue;
}
if(cal()) printf("(%d,%d)\n",x,y);
else printf("#####\n");
}
}
poj 1568 Find the Winning Move 极大极小搜索的更多相关文章
- POJ 1568 Find the Winning Move
Find the Winning Move 链接 题意: 4*4的棋盘,给出一个初始局面,问先手有没有必胜策略? 有的话输出第一步下在哪里,如果有多个,按(0, 0), (0, 1), (0, 2), ...
- poj1568 Find the Winning Move[极大极小搜索+alpha-beta剪枝]
Find the Winning Move Time Limit: 3000MS Memory Limit: 32768K Total Submissions: 1286 Accepted: ...
- POJ 1568 Find the Winning Move(极大极小搜索)
题目链接:http://poj.org/problem?id=1568 题意:给出一个4*4的棋盘,x和o两人轮流放.先放够连续四个的赢.给定一个局面,下一个轮到x放.问x是否有必胜策略?若有,输出能 ...
- POJ 1568 极大极小搜索 + alpha-beta剪枝
极小极大搜索 的个人理解(alpha-beta剪枝) 主要算法依据就是根据极大极小搜索实现的. 苦逼的是,查了两个晚上的错,原来最终是判断函数写错了..瞬间吐血! ps. 据说加一句 if sum & ...
- 【迭代博弈+搜索+剪枝】poj-1568--Find the Winning Move
poj 1568:Find the Winning Move [迭代博弈+搜索+剪枝] 题面省略... Input The input contains one or more test cas ...
- 算法笔记--极大极小搜索及alpha-beta剪枝
参考1:https://www.zhihu.com/question/27221568 参考2:https://blog.csdn.net/hzk_cpp/article/details/792757 ...
- 【poj1568】 Find the Winning Move
http://poj.org/problem?id=1568 (题目链接) 题意 两人下4*4的井字棋,给出一个残局,问是否有先手必胜策略. Solution 极大极小搜索.. 这里有个强力优化,若已 ...
- 极大极小搜索思想+(α/β)减枝 【转自-----https://blog.csdn.net/hzk_cpp/article/details/79275772】
极大极小搜索,即minimax搜索算法,专门用来做博弈论的问题的暴力. 多被称为对抗搜索算法. 这个搜索算法的基本思想就是分两层,一层是先手,记为a,还有一层是后手,记为b. 这个搜索是认为这a与b的 ...
- [CodeVs3196]黄金宝藏(DP/极大极小搜索)
题目大意:给出n(≤500)个数,两个人轮流取数,每次可以从数列左边或者右边取一个数,直到所有的数被取完,两个人都以最优策略取数,求最后两人所得分数. 显然这种类型的博弈题,第一眼就是极大极小搜索+记 ...
随机推荐
- hdu 1305 Immediate Decodability
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1305 字典树裸题,如下: #include<algorithm> #include< ...
- android string.xml %问题
反复检查后发现是string.xml中的 % 导致编译失败, 这是由于新的SDK采用了新版本的aapt(Android项目编译器),这个版本的aapt编译起来会比老版本更加的严格,然后在Android ...
- android开发图片分辨率问题解决方案
dpi是什么呢? dpi是“dot per inch”的缩写,每英寸像素数. 四种密度分类: ldpi (low), mdpi (medium), hdpi (high), and xhdpi (ex ...
- Android之Activity的四种启动模式
当应用运行起来后就会开启一条线程,线程中会运行一个任务栈,当Activity实例创建后就会放入任务栈中.Activity启动模式的设置在AndroidManifest.xml文件中,通过配置Activ ...
- 基于opencv 的图片模糊判断代码
#include"cv.h" #include"highgui.h" #include<iostream> using namespace s ...
- HTTP上传文件探究
通常情况下,我们想在网页上上传一个文件的时候,会采用<input type="file">标签,但是你有没有想过,为什么通过这样一个标签,服务器端就能获取到文件数据呢? ...
- Win8.1+vs2012+osg环境搭建
Win8.1+vs2012+osg环境搭建 一. 相关准备 a) Osg源码 当前最新版:OpenSceneGraph-3.2.0.zip 下载链接: http://www.opensceneg ...
- Z_blog博客尝试 http://www.uuxin.com/
原来的博客由于没有备份所有数据全部丢失,很是郁闷. 又用Z-BLOG新建了一个博客.http://www.uuxin.com
- Android下写一个永远不会被KILL掉的进程/服务
Android 系统对于内存管理有自己的一套方法,为了保障系统有序稳定的运信,系统内部会自动分配,控制程序的内存使用.当系统觉得当前的资源非常有限的时候,为了保证一些优先级高的程序能运行,就会杀掉一些 ...
- 网件无线网卡在windows 2012支持问题
网件的无线网卡的驱动是支持windows 8.1的,但是安装了驱动后,却没法启动网卡.网上搜索后发现,service里面网件有一进程没法启动:而2012年忘记官方论坛技术支持答复咨询居然说,网件驱动不 ...