题目来源: syu校赛
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
原题链接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1995

小的时候大家一定玩过“井”字棋吧。也就是在九宫格中,只要任意行、列,或者任意连续对角线上面出现三个相同的,就能获胜。现在小明和小花也在玩三子棋,但是他们不是在九宫格里,而是在3×4的格子里面。现在小明先下,但是他知道小花这个人很聪明,他想知道第一步下在哪一个地方最合适,你能帮帮他吗?

Input
第一行输入一个整数T,表示数据组数(1<T<10000); 
第二行输入两个整数x,y,表示3×4格子里面的一个坐标(x,y)(1<=x<=3,1<=y<=4);
Output
每组数据输出最后小明输赢的结果,如果小明一定能赢,第一行输出“Win”,第二行输出小明所需要花的最少步数;如果小明跟小花只能打成平手,第一行输出“Equal”,第二行输出数字0;如果小明不能赢也不能跟小花打成平手,第一行输出“Lose”,第二行输出小花赢小明所需要花的最少步数。
Input示例
2
2 1
2 4
Output示例
Equal
0
Equal
0 -------------------------------------------------------------------------------
看到这个题目我想到了搜索,但计算了一下时间复杂度:不是很大,应该不会超时!但是,这是个博弈问题,暴力穷举的话没法进行模拟!
 #include<stdio.h>
#include<string.h>
#include<iostream>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
#include<queue>
using namespace std;
#define inf 0x3f3f3f3f
#define emin 1e-10
#define ll long long //10:19--
int mp[][],flag;
int dir[][]= { {,},{,-},{,},{,-},{,},{-,-},{-,},{-,} }; int check()
{
int i,j;
for(j=; j<=; j++) //竖行
{
if(mp[][j]==mp[][j]&&mp[][j]==mp[][j]&&mp[][j]!=-)
return mp[][j];
}
for(i=; i<=; i++) //横行
{
if(mp[i][]==mp[i][]&&mp[i][]==mp[i][]&&mp[i][]!=-)
return mp[i][];
if(mp[i][]==mp[i][]&&mp[i][]==mp[i][]&&mp[i][]!=-)
return mp[i][];
}
if(mp[][]==mp[][]&&mp[][]==mp[][]&&mp[][]!=-)
return mp[][];
if(mp[][]==mp[][]&&mp[][]==mp[][]&&mp[][]!=-)
return mp[][];
if(mp[][]==mp[][]&&mp[][]==mp[][]&&mp[][]!=-)
return mp[][];
if(mp[][]==mp[][]&&mp[][]==mp[][]&&mp[][]!=-)
return mp[][];
return -; //当前局面无结果
}
void print_mp()
{
for(int i=; i<=; i++)
{
for(int j=; j<=; j++)
printf("%3d",mp[i][j]);
printf("\n");
}
}
//num=0表示先手下棋者,num=1表示后手下棋者
int game(int step,int num) //当前正要走的的步数step,num表示当前step步下棋者
{
int i,j,k;
if(step==) //至多12个格子
return -;
if(k=check(),k!=-) //不用下棋时就已经达到获胜或者失败的局面了!
{
return k;
}
for(i=; i<=; i++)
{
for(j=; j<=; j++)
{
if(mp[i][j]==-)
{
mp[i][j]=num; if(check()==num) //下完一步后,检验整个棋盘可以获胜则返回
{
mp[i][j]=-;
return num; //返回当前局面的获胜者
}
if(game(step+,!num)==num) //后续递归博弈处理可以胜利则返回
{
mp[i][j]=-;
return num; //返回当前局面的获胜者
}
mp[i][j]=-;
}
}
}
return !num;
} int main()
{
int a,b,ans;
// init();
for(a=; a<=; a++)
{
for(b=; b<=; b++)
{
memset(mp,-,sizeof(mp));
mp[a][b]=;//先手先下一步
ans=game(,); //调用博弈函数
if(ans==)
printf("当a=%d,b=%d, 先手Win\n",a,b);
else
printf("当a=%d,b=%d, 先手Lose 或者 Equal\n",a,b);
}
} return ;
}

友情提示这不是题解!没法判断是否可以达到平局的局面,但这题不存在平局的局面;想判断的话,可以用调用game函数的次数来判断!(可能吧!)

像这类博弈问题基本都是找规律的,找不出来规律就没法了!除非很水的题!

【胡搞的不能AC的题解,暴力搜索一发博弈问题】1995 三子棋 - 51Nod的更多相关文章

  1. 胡搞-强化版的light oj-1055-的思路-AI版的6重暴力For循环的BFS

    新题目大意: 三个棋子按照先后顺序,可以随意方向合法地走到空位置上(而不是像原题light oj-1055中的一样三个棋子每次走的方向都一致),当三个棋子全部走进目标地点,就结束:求需要指挥的最少次数 ...

  2. [LeetCode]Integer Break(Dp或胡搞或推公式)

    343. Integer Break Given a positive integer n, break it into the sum of at least two positive intege ...

  3. HDU 4690 EBCDIC (2013多校 1005题 胡搞题)

    EBCDIC Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others)Total Su ...

  4. ACM 暴力搜索题 题目整理

    UVa 129 Krypton Factor 注意输出格式,比较坑爹. 每次要进行处理去掉容易的串,统计困难串的个数. #include<iostream> #include<vec ...

  5. hdu 4740 The Donkey of Gui Zhou(暴力搜索)

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4740 [题意]: 森林里有一只驴和一只老虎,驴和老虎互相从来都没有见过,各自自己走过的地方不能走第二次 ...

  6. HDU 3131 One…Two…Five! (暴力搜索)

    题目链接:pid=3131">HDU 3131 One-Two-Five! (暴力搜索) 题意:给出一串数字,要求用加,减,乘,除(5/2=2)连接(计算无优先级:5+3*6=8*6= ...

  7. POJ 1129:Channel Allocation 四色定理+暴力搜索

    Channel Allocation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 13357   Accepted: 68 ...

  8. 牛客练习赛24题解(搜索,DP)

    A题,C题不讲,基础题(但是我要抨击一下这次比赛,卡cin,cout,卡的太狠了,根本就不让过的那种,QAQ) 链接:https://www.nowcoder.com/acm/contest/157/ ...

  9. hdu 1427 速算24点 dfs暴力搜索

    速算24点 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem De ...

随机推荐

  1. 软件测试成熟度模型TCMM (转载)

    下面我们就看看是如何划分的,来评判一下各位同仁自己所在的公司,所在的级别. TCMM Level 1:Initial(初始级)   测试处于一个混乱的状态,还不能把测试同调试分开,在编码完成后才进行测 ...

  2. C++拾忆

    1.引用 1.建立引用的时候,必须初始化,引用一旦初始化,就和一个对象绑定,不能再修改为其他对象的引用 2.对引用取地址,和对原始对象取地址,是同一个地址 3.不能用做引用的:void.数组 2.内联 ...

  3. Word 自动图文集使用方法

    1. 自动图文集简介 使用自动图文集当你在文档中输入你所需的模板名称后,就能立刻变出该内容出来. 1.1 效果演示 1:个人简历 如下图所示,在Word文档中输入了"个人简历"后, ...

  4. 2019ICPC南昌现场赛总结

    非常可惜的一场比赛,多了60分钟罚时与银牌无缘.今年6场ICPC网络赛里面打的最差的就是南昌站,冥冥之中自有天意吧,最后被安排去了南昌. 开场被队友叫去先看的L,说是足球,发现就是简单模拟,就直接上机 ...

  5. WUSTOJ 1320: 饭卡(Java)动态规划-背包

    题目链接:

  6. docker 实践六:dockerfile 详解

    本篇开始来学习关于 dockerfile 的知识. 注:环境为 CentOS7,docker 19.03. dockerfile 是⼀个⽂本格式的配置⽂件, ⽤户可以使⽤ dockerfile 来快速 ...

  7. 15. Scala并发编程模型Akka

    15.1 Akka介绍 1) Akka是Java虚拟机JVM平台上构建高并发.分布式和容错应用的工具包和运行时,可以理解成Akka是编写并发程序的框架 2) Akka用Scala语言写成,同时提供了S ...

  8. 在vue中使用swiper组件

    第一步:在终端的项目根目录下载安装swiper: cnpm/npm install vue-awesome-swiper --save; 第二步:在程序入口文件main.js中引用: import V ...

  9. PowerBuilder学习笔记之行删除卡死问题

    在数据窗口勾选这两个选项后,在删除行数据时会导致系统直接崩溃退出

  10. Account locked due to 25 failed logins

    Account locked due to 25 failed logins  pam_tally2 --user=ops  #查看   pam_tally2 --user=ops --reset # ...