思路:用极大极小搜索解决这样的问题很方便!!

代码如下:

 #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 极大极小搜索的更多相关文章

  1. POJ 1568 Find the Winning Move

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

  2. poj1568 Find the Winning Move[极大极小搜索+alpha-beta剪枝]

    Find the Winning Move Time Limit: 3000MS   Memory Limit: 32768K Total Submissions: 1286   Accepted:  ...

  3. POJ 1568 Find the Winning Move(极大极小搜索)

    题目链接:http://poj.org/problem?id=1568 题意:给出一个4*4的棋盘,x和o两人轮流放.先放够连续四个的赢.给定一个局面,下一个轮到x放.问x是否有必胜策略?若有,输出能 ...

  4. POJ 1568 极大极小搜索 + alpha-beta剪枝

    极小极大搜索 的个人理解(alpha-beta剪枝) 主要算法依据就是根据极大极小搜索实现的. 苦逼的是,查了两个晚上的错,原来最终是判断函数写错了..瞬间吐血! ps. 据说加一句 if sum & ...

  5. 【迭代博弈+搜索+剪枝】poj-1568--Find the Winning Move

    poj  1568:Find the Winning Move   [迭代博弈+搜索+剪枝] 题面省略... Input The input contains one or more test cas ...

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

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

  7. 【poj1568】 Find the Winning Move

    http://poj.org/problem?id=1568 (题目链接) 题意 两人下4*4的井字棋,给出一个残局,问是否有先手必胜策略. Solution 极大极小搜索.. 这里有个强力优化,若已 ...

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

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

  9. [CodeVs3196]黄金宝藏(DP/极大极小搜索)

    题目大意:给出n(≤500)个数,两个人轮流取数,每次可以从数列左边或者右边取一个数,直到所有的数被取完,两个人都以最优策略取数,求最后两人所得分数. 显然这种类型的博弈题,第一眼就是极大极小搜索+记 ...

随机推荐

  1. hdu 2578 Dating with girls(1)

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2578 Dating with girls(1) Description Everyone in the ...

  2. 教你怎么安装Redis

    以下命令以root用户运行:#cd /tmp/#wget http://redis.googlecode.com/files/redis-2.6.11.tar.gz#tar xzf redis-2.6 ...

  3. C#中的Attribute

    最近用到了,所以静下心来找些资料看了一下,终于把这东西搞清楚了. 一.什么是Attribute 先看下面的三段代码: 1.自定义Attribute类:VersionAttribute [Attribu ...

  4. netlink+netfilter

    http://blog.chinaunix.net/uid-21768364-id-3618377.html

  5. [译]rabbitmq 2.5 Where’s my message? Durability and you

    我对rabbitmq学习还不深入,这些翻译仅仅做资料保存,希望不要误导大家. There’s a dirty secret about creating queues and exchanges in ...

  6. MVC 初始 Log4net (一)

    以前没有使用过Log4net 插件来记录日志文件,今天研究了一下,算是有点小眉目了,只是简单的使用一下:来写一篇博客自己记录一下,希望大神们多多包涵,小伙伴多多给提些建议,相互学习,我也是初始阶段,有 ...

  7. 静态数据认证(SDA)与动态数据认证(DDA)的区别

    PBOC/EMV里有两个非常重要的概念,SDA(staticdataauthentication)和DDA(dynamicdataauthentication),分别叫做静态数据认证和动态数据认证.这 ...

  8. Netsharp快速入门(之6) 基础档案(创建导航菜单)

    作者:秋时 杨昶   时间:2014-02-15  转载须说明出处 1.1     创建导航菜单 1.在Demo节点下,录入路径名称,并在下方录入两个导航页签名 2.建立分类,只要填路径名 3.双击基 ...

  9. bzoj 1800 暴力枚举

    直接暴力枚举四个点,然后判断是否能组成矩形就行了 注意枚举的点的标号从小到大,保证不重复枚举 /**************************************************** ...

  10. eclipse中设置中文javadoc+如何查看class的中文javadoc

    一.  eclipse中设置中文javadoc 1.先到http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/publish ...