CCF-棋局评估 201803-04(版本 2.0)------(之前写了一个臃肿的1.0版 ,还沾沾自喜 233)
核心 : 博弈搜索树
双方得分互为相反数
dfs (x,y,player): 玩家player下完(x,y)之后的得分最大值
易错: 先判断输赢,再判断平局
待改进: check() 函数写的还是太臃肿了 233
#include <bits/stdc++.h>
using namespace std;
const int N = ;
int mp[][];
int check () {
int num=;
for (int i=;i<=N;i++)
for (int j=;j<=N;j++)
if (mp[i][j]==) num++;
for (int i=;i<=;i++) {
int x=mp[i][];
if (x==) continue;
for (int j=;j<=;j++) {
if (mp[i][j]!=x)
break;
if (j==)
return num+;
}
}
for (int i=;i<=;i++) {
int x=mp[][i];
if (x==) continue;
for (int j=;j<=;j++) {
if (mp[j][i]!=x)
break;
if (j==)
return num+;
}
}
int x=mp[][];
if (x&&mp[][]==mp[][]&&mp[][]==mp[][]) return num+;
x=mp[][];
if (x&&mp[][]==mp[][]&&mp[][]==mp[][]) return num+;
if (num==) return ;
return -;
}
int dfs (int x, int y, int player) {
mp[x][y] = player;
int k = check();
if (k >= ) {
mp[x][y] = ;
return k;
}
int ans = -;
for (int i = ; i <= N; i++)
for (int j = ; j <= N; j++) {
if (!mp[i][j])
ans = max (ans, dfs(i, j, ( (player - ) ^ ) + ) );
}
mp[x][y]=;
return -ans;
}
int main ()
{
int T;
scanf ("%d", &T);
while (T--) {
for (int i = ; i <= N; i++)
for (int j = ; j <= N; j++)
scanf ("%d", &mp[i][j]);
int k=check ();
if (k>=) {
printf("%d\n",-k);
continue;
}
int ans = -;
for (int i = ; i <= N; i++)
for (int j = ; j <= N; j++)
if (!mp[i][j])
ans = max (dfs(i, j, ), ans);
printf ("%d\n", ans);
}
return ;
}
CCF-棋局评估 201803-04(版本 2.0)------(之前写了一个臃肿的1.0版 ,还沾沾自喜 233)的更多相关文章
- ccf 201803-4 棋局评估(Python实现)
一.原题 问题描述 试题编号: 201803-4 试题名称: 棋局评估 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 Alice和Bob正在玩井字棋游戏. 井字棋游戏的规则很 ...
- ccf 201803-4 棋局评估 (对抗搜索)
棋局评估 问题描述 Alice和Bob正在玩井字棋游戏. 井字棋游戏的规则很简单:两人轮流往3*3的棋盘中放棋子,Alice放的是“X”,Bob放的是“O”,Alice执先.当同一种棋子占据一行.一列 ...
- CCF(棋局评估)博弈论+对抗搜索+DFS
201803-4 棋局评估 这题主要使用对抗搜索,也就是每一步寻找可以下棋的位置,通过在这一步下棋看最后会取的什么样的分数. #include<iostream> #include< ...
- ubuntu10.04版本下android源码的编译
首先是网址:http://software.intel.com/en-us/blogs/2012/03/06/hands-on-notesbuild-android-x86-ics-4-virtual ...
- Ubuntu 17.04版本下,opencv进行源码编译安装
本文主要针对Ubuntu 17.04版本下,opencv进行源码编译安装.开发环境主要针对python 对 openCV库的调用. 安装 gcc cmake 编译环境 sudo apt-get ins ...
- 记录ubuntu16.04版本安装过程中遇到的问题
记录ubuntu16.04版本安装和使用过程中遇到的些问题,方便以后查看,主要内容有: 1. ubuntu源替换 2. windows与vmware ubuntu文件夹共享 3. putty连接ubu ...
- CCF-CSP题解 201803-4 棋局评估
求当前井字棋局的得分. 用dfs虚构一下搜索树,每个节点对应一个不同的棋局. 每个节点有一个situation()情况评估,若胜负已定,则对应该棋局的评分:否则为0,表示胜负未定或平局. 每个节点还有 ...
- 安装Ubuntu14.04版本的操作系统
1:安装好虚拟机之后便是安装操作系统,操作系统分为好多种,在这里笔者使用的是Ubuntu14.04版本的操作系统,除此之后还可以使用fedora或者小红帽等等操作系统 软件包http://pan.ba ...
- 其它综合-VMware虚拟机安装Ubuntu 19.04 版本
Ubuntu 19.04 版本安装过程 1. 环境: 使用的虚拟机软件是VMware,版本为 12 .(网上一搜一大推,在此不再演示.) 使用的 ISO镜像为Ubuntu 19.04.(自己也可以在网 ...
随机推荐
- Notes on Large-scale Video Classification with Convolutional Neural Networks
Use bigger datasets for CNN in hope of better performance. A new data set for sports video classific ...
- 【Query】使用java对mysql数据库进行查询操作
操作步骤: 1.加载数据库驱动(先在工程里加载数据库对应的驱动包) 2.获取连接 3.根据连接建立一个可执行sql的对象 4.执行sql语句 5.关闭连接 代码: package database; ...
- shell 变量介绍
变量命名规则 变量名必须以字母或下划线开头,名字中间只能由字母,数字和下划线组成,大小写是区分的 变量名的长度不得超过255个字符 变量名在有效的范围内必须是唯一的 在Bash中,变量的默认类型都是字 ...
- Uva LA 3902 - Network 树形DP 难度: 0
题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...
- alpine linux docker 安装 lxml出错的解决办法。
我习惯在docker当中用alpine来部署服务. 最近在部署flask时使用了 tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7 这个镜像 别人写好的fl ...
- java 实现单向链表
package cn.com.factroy2; /** * 可以看做是操作链表的工具类,链表的核心结构就是节点的数据结构 * @author wanjn * */ public class Sing ...
- MySQL 占用cpu 100%
目前的线上数据库,分为主从两个库,从库用来做比较耗时的数据统计分析. 今天top了一下从库服务器,发现mysqld 在很长一段时间都占用105% cpu,一开始以为是从库在处理主库的binlog. 两 ...
- vue-router-8-路由组件传参
在组件中使用$route会使之与其对应路由形成高度耦合,使用props解耦 const User = { props: ['id'], template: '<div>User{{ id ...
- [Leetcode 104]求二叉树的深度Depth of BinaryTree
[题目] Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the ...
- 小程序之setData特殊情况 三种情况的wx:if
比如data{ “a”:{}, "b":{} } 你想完成这样的结构 //创建一个对象 var readyData={} //对象[key] =另一个对象 readyData[ke ...