201803-4

棋局评估

这题主要使用对抗搜索,也就是每一步寻找可以下棋的位置,通过在这一步下棋看最后会取的什么样的分数。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
const int INF=0x3f3f3f3f;
int map[3][3];
bool row(int i,int p){return map[i][1]==p&&map[i][2]==p&&map[i][0]==p;}
bool col(int j,int p){return map[0][j]==p&&map[1][j]==p&&map[2][j]==p;}
bool tan(int p){
if(map[0][0]==p&&map[1][1]==p&&map[2][2]==p)
return true;
else if(map[0][2]==p&&map[1][1]==p&&map[2][0]==p)
return true;
return false;
}
int calans(){//计算空格有多少
int ans=0;
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
if(!map[i][j])
ans++;
}
}
return ans;
}
int grade(int p){//当前局面得分多少,p=1表示Alice,2表示Bob
int ans=calans();
ans+=1;
bool flag=false;
if(row(0,p)||row(1,p)||row(2,p))
flag=true;
if(col(1,p)||col(2,p)||col(0,p))
flag=true;
if(tan(p))
flag=true;
if(!flag)
return 0;
else{
return p==1?ans:-ans;
}
}
int dfs(int p){//现在下棋的是p
if(calans()==0)
return 0;
int maxs=-INF;
int mins=INF;
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
if(!map[i][j]){//如果这里是空格,可以下棋
map[i][j]=p;
int gra=grade(p);
if(gra!=0){//这里已经可以判断胜负了
map[i][j]=0;
return gra>0?max(maxs,gra):min(mins,gra);
}
if(p==1){//当前是Alice
maxs=max(maxs,dfs(2));
}else{//当前是Bob
mins=min(mins,dfs(1));
}
map[i][j]=0;
}
}
}
if(p==1)
return maxs;
return mins;
}
int main(){
int t;
cin>>t;
while(t--){
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
cin>>map[i][j];
}
}
int gra1=grade(1);
int gra2=grade(2);
if(gra1){
cout<<gra1<<endl;
continue;
}
if(gra2){
cout<<gra2<<endl;
continue;
}
cout<<dfs(1)<<endl;
}
//system("pause");
return 0;
}

CCF(棋局评估)博弈论+对抗搜索+DFS的更多相关文章

  1. ccf 201803-4 棋局评估 (对抗搜索)

    棋局评估 问题描述 Alice和Bob正在玩井字棋游戏. 井字棋游戏的规则很简单:两人轮流往3*3的棋盘中放棋子,Alice放的是“X”,Bob放的是“O”,Alice执先.当同一种棋子占据一行.一列 ...

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

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

  3. ccf 201803-4 棋局评估(Python实现)

    一.原题 问题描述 试题编号: 201803-4 试题名称: 棋局评估 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 Alice和Bob正在玩井字棋游戏. 井字棋游戏的规则很 ...

  4. 【CCF】棋局评估

    博弈论极小极大搜索,记忆化+状压 #include<iostream> #include<cstdio> #include<string> #include< ...

  5. ICPC Asia Nanning 2017 I. Rake It In (DFS+贪心 或 对抗搜索+Alpha-Beta剪枝)

    题目链接:Rake It In 比赛链接:ICPC Asia Nanning 2017 Description The designers have come up with a new simple ...

  6. BZOJ 3106: [cqoi2013]棋盘游戏(对抗搜索)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3106 对抗搜索,f[x][y][a][b][c][d]表示当前谁走,走了几步,及位置. (因为 ...

  7. BZOJ.5248.[九省联考2018]一双木棋chess(对抗搜索 记忆化)

    BZOJ 洛谷P4363 [Update] 19.2.9 重做了遍,感觉之前写的有点扯= = 首先棋子的放置情况是阶梯状的. 其次,无论已经放棋子的格子上哪些是黑棋子哪些是白棋子,之前得分如何,两人在 ...

  8. 【BZOJ3106】[CQOI2013] 棋盘游戏(对抗搜索)

    点此看题面 大致题意: 在一张\(n*n\)的棋盘上有一枚黑棋子和一枚白棋子.白棋子先移动,然后是黑棋子.白棋子每次可以向上下左右四个方向中任一方向移动一步,黑棋子每次则可以向上下左右四个方向中任一方 ...

  9. P4363 [九省联考2018]一双木棋chess(对抗搜索+记忆化搜索)

    传送门 这对抗搜索是个啥玩意儿…… 首先可以发现每一行的棋子数都不小于下一行,且局面可由每一行的棋子数唯一表示,那么用一个m+1进制数来表示当前局面,用longlong存,开map记忆化搜索 然后时间 ...

随机推荐

  1. java大数函数(附官方文档链接)

    java文档 字段摘要 static BigInteger ONE           BigInteger 的常量 1. static BigInteger TEN           BigInt ...

  2. hdu5662 YJQQQAQ and the function (单调栈)

    Problem Description YJQQQAQ has an array A of length n. He defines a function fl,r,k where l,r,k are ...

  3. Codeforces Round #540 (Div. 3) D2. Coffee and Coursework (Hard Version) (二分,贪心)

    题意:有\(n\)个数,每次可以选\(k(1\le k\le n)\)个数,并且得到\(a_1+max(0,a_2-1)+max(0,a_3-2)+...+max(0,a_k-k+1)\)的贡献,问最 ...

  4. 二叉树增删改查 && 程序实现

    二叉排序树定义 一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值:(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值:(3)左.右子树也 ...

  5. OpenCV3.2+Python3.5+Ubuntu16.04+缺少boostdesc和vgg_generated

    问题: OpenCV3.2在cmake通过https无法获取boostdesc和vgg_generated2类文件 可尝试的解决方法: 参考, 依其方法至这里做调整, 最后注释xfeatures2d/ ...

  6. [USACO15JAN]Moovie Mooving G

    [USACO15JAN]Moovie Mooving G 状压难题.不过也好理解. 首先我们根据题意: she does not want to ever visit the same movie t ...

  7. Sentry 高级使用教程

    Sentry 高级使用教程 Sentry versions https://github.com/getsentry/sentry-docs https://github.com/getsentry/ ...

  8. APP 金刚区图标设计 & UI

    APP 金刚区图标设计 & UI https://www.zcool.com.cn/article/ZNzk4Njg0.html

  9. css命名规范和书写规范

    1.位置属性(position, top, right, z-index, display, float等)2.大小(width, height, padding, margin)3.文字系列(fon ...

  10. NGK官方又出助力市场计划方案 1万枚VAST任性送

    近期NGK官方的一系列动作,可以说是在向外界宣告:NGK2.0即将来袭,席卷加密数字货币市场.前一段时间,NGK官方宣布,NGK公链布局算力领域,打造NGK算力生态星空计划,并推出了SPC星空币.目前 ...