CCF(棋局评估)博弈论+对抗搜索+DFS
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的更多相关文章
- ccf 201803-4 棋局评估 (对抗搜索)
棋局评估 问题描述 Alice和Bob正在玩井字棋游戏. 井字棋游戏的规则很简单:两人轮流往3*3的棋盘中放棋子,Alice放的是“X”,Bob放的是“O”,Alice执先.当同一种棋子占据一行.一列 ...
- 博弈论经典算法(一)——对抗搜索与Alpha-Beta剪枝
前言 在一些复杂的博弈论题目中,每一轮操作都可能有许多决策,于是就会形成一棵庞大的博弈树. 而有一些博弈论题没有什么规律,针对这样的问题,我们就需要用一些十分玄学的算法. 例如对抗搜索. 对抗搜索简介 ...
- ccf 201803-4 棋局评估(Python实现)
一.原题 问题描述 试题编号: 201803-4 试题名称: 棋局评估 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 Alice和Bob正在玩井字棋游戏. 井字棋游戏的规则很 ...
- 【CCF】棋局评估
博弈论极小极大搜索,记忆化+状压 #include<iostream> #include<cstdio> #include<string> #include< ...
- 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 ...
- BZOJ 3106: [cqoi2013]棋盘游戏(对抗搜索)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3106 对抗搜索,f[x][y][a][b][c][d]表示当前谁走,走了几步,及位置. (因为 ...
- BZOJ.5248.[九省联考2018]一双木棋chess(对抗搜索 记忆化)
BZOJ 洛谷P4363 [Update] 19.2.9 重做了遍,感觉之前写的有点扯= = 首先棋子的放置情况是阶梯状的. 其次,无论已经放棋子的格子上哪些是黑棋子哪些是白棋子,之前得分如何,两人在 ...
- 【BZOJ3106】[CQOI2013] 棋盘游戏(对抗搜索)
点此看题面 大致题意: 在一张\(n*n\)的棋盘上有一枚黑棋子和一枚白棋子.白棋子先移动,然后是黑棋子.白棋子每次可以向上下左右四个方向中任一方向移动一步,黑棋子每次则可以向上下左右四个方向中任一方 ...
- P4363 [九省联考2018]一双木棋chess(对抗搜索+记忆化搜索)
传送门 这对抗搜索是个啥玩意儿…… 首先可以发现每一行的棋子数都不小于下一行,且局面可由每一行的棋子数唯一表示,那么用一个m+1进制数来表示当前局面,用longlong存,开map记忆化搜索 然后时间 ...
随机推荐
- java大数函数(附官方文档链接)
java文档 字段摘要 static BigInteger ONE BigInteger 的常量 1. static BigInteger TEN BigInt ...
- 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 ...
- 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)\)的贡献,问最 ...
- 二叉树增删改查 && 程序实现
二叉排序树定义 一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值:(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值:(3)左.右子树也 ...
- OpenCV3.2+Python3.5+Ubuntu16.04+缺少boostdesc和vgg_generated
问题: OpenCV3.2在cmake通过https无法获取boostdesc和vgg_generated2类文件 可尝试的解决方法: 参考, 依其方法至这里做调整, 最后注释xfeatures2d/ ...
- [USACO15JAN]Moovie Mooving G
[USACO15JAN]Moovie Mooving G 状压难题.不过也好理解. 首先我们根据题意: she does not want to ever visit the same movie t ...
- Sentry 高级使用教程
Sentry 高级使用教程 Sentry versions https://github.com/getsentry/sentry-docs https://github.com/getsentry/ ...
- APP 金刚区图标设计 & UI
APP 金刚区图标设计 & UI https://www.zcool.com.cn/article/ZNzk4Njg0.html
- css命名规范和书写规范
1.位置属性(position, top, right, z-index, display, float等)2.大小(width, height, padding, margin)3.文字系列(fon ...
- NGK官方又出助力市场计划方案 1万枚VAST任性送
近期NGK官方的一系列动作,可以说是在向外界宣告:NGK2.0即将来袭,席卷加密数字货币市场.前一段时间,NGK官方宣布,NGK公链布局算力领域,打造NGK算力生态星空计划,并推出了SPC星空币.目前 ...