【胡搞的不能AC的题解,暴力搜索一发博弈问题】1995 三子棋 - 51Nod
小的时候大家一定玩过“井”字棋吧。也就是在九宫格中,只要任意行、列,或者任意连续对角线上面出现三个相同的,就能获胜。现在小明和小花也在玩三子棋,但是他们不是在九宫格里,而是在3×4的格子里面。现在小明先下,但是他知道小花这个人很聪明,他想知道第一步下在哪一个地方最合适,你能帮帮他吗?
第一行输入一个整数T,表示数据组数(1<T<10000); 第二行输入两个整数x,y,表示3×4格子里面的一个坐标(x,y)(1<=x<=3,1<=y<=4);
每组数据输出最后小明输赢的结果,如果小明一定能赢,第一行输出“Win”,第二行输出小明所需要花的最少步数;如果小明跟小花只能打成平手,第一行输出“Equal”,第二行输出数字0;如果小明不能赢也不能跟小花打成平手,第一行输出“Lose”,第二行输出小花赢小明所需要花的最少步数。
2 2 1 2 4
Equal 0 Equal 0 -------------------------------------------------------------------------------看到这个题目我想到了搜索,但计算了一下时间复杂度:不是很大,应该不会超时!但是,这是个博弈问题,暴力穷举的话没法进行模拟!
1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 #include<stdlib.h> 5 #include<math.h> 6 #include<algorithm> 7 #include<queue> 8 using namespace std; 9 #define inf 0x3f3f3f3f 10 #define emin 1e-10 11 #define ll long long //10:19-- 12 int mp[4][5],flag; 13 int dir[8][2]= { {0,1},{0,-1},{1,0},{1,-1},{1,1},{-1,-1},{-1,0},{-1,1} }; 14 15 int check() 16 { 17 int i,j; 18 for(j=1; j<=4; j++) //竖行 19 { 20 if(mp[1][j]==mp[2][j]&&mp[2][j]==mp[3][j]&&mp[3][j]!=-1) 21 return mp[1][j]; 22 } 23 for(i=1; i<=3; i++) //横行 24 { 25 if(mp[i][1]==mp[i][2]&&mp[i][2]==mp[i][3]&&mp[i][3]!=-1) 26 return mp[i][2]; 27 if(mp[i][2]==mp[i][3]&&mp[i][3]==mp[i][4]&&mp[i][3]!=-1) 28 return mp[i][2]; 29 } 30 if(mp[1][1]==mp[2][2]&&mp[2][2]==mp[3][3]&&mp[3][3]!=-1) 31 return mp[1][1]; 32 if(mp[1][2]==mp[2][3]&&mp[2][3]==mp[3][4]&&mp[3][4]!=-1) 33 return mp[1][2]; 34 if(mp[1][3]==mp[2][2]&&mp[2][2]==mp[3][1]&&mp[3][1]!=-1) 35 return mp[1][3]; 36 if(mp[1][4]==mp[2][3]&&mp[2][3]==mp[3][2]&&mp[3][2]!=-1) 37 return mp[2][3]; 38 return -1; //当前局面无结果 39 } 40 void print_mp() 41 { 42 for(int i=1; i<=3; i++) 43 { 44 for(int j=1; j<=4; j++) 45 printf("%3d",mp[i][j]); 46 printf("\n"); 47 } 48 } 49 //num=0表示先手下棋者,num=1表示后手下棋者 50 int game(int step,int num) //当前正要走的的步数step,num表示当前step步下棋者 51 { 52 int i,j,k; 53 if(step==13) //至多12个格子 54 return -1; 55 if(k=check(),k!=-1) //不用下棋时就已经达到获胜或者失败的局面了! 56 { 57 return k; 58 } 59 for(i=1; i<=3; i++) 60 { 61 for(j=1; j<=4; j++) 62 { 63 if(mp[i][j]==-1) 64 { 65 mp[i][j]=num; 66 67 if(check()==num) //下完一步后,检验整个棋盘可以获胜则返回 68 { 69 mp[i][j]=-1; 70 return num; //返回当前局面的获胜者 71 } 72 if(game(step+1,!num)==num) //后续递归博弈处理可以胜利则返回 73 { 74 mp[i][j]=-1; 75 return num; //返回当前局面的获胜者 76 } 77 mp[i][j]=-1; 78 } 79 } 80 } 81 return !num; 82 } 83 84 85 int main() 86 { 87 int a,b,ans; 88 // init(); 89 for(a=1; a<=3; a++) 90 { 91 for(b=1; b<=4; b++) 92 { 93 memset(mp,-1,sizeof(mp)); 94 mp[a][b]=0;//先手先下一步 95 ans=game(2,1); //调用博弈函数 96 if(ans==0) 97 printf("当a=%d,b=%d, 先手Win\n",a,b); 98 else 99 printf("当a=%d,b=%d, 先手Lose 或者 Equal\n",a,b); 100 } 101 } 102 103 return 0; 104 }
View Code
友情提示这不是题解!没法判断是否可以达到平局的局面,但这题不存在平局的局面;想判断的话,可以用调用game函数的次数来判断!(可能吧!)
像这类博弈问题基本都是找规律的,找不出来规律就没法了!除非很水的题!
转载于:https://www.cnblogs.com/zhazhaacmer/p/8117808.html
【胡搞的不能AC的题解,暴力搜索一发博弈问题】1995 三子棋 - 51Nod相关推荐
- Linux作者批评英特尔指令集,Linux之父炮轰英特尔:ECC内存很重要,不好买都怪你胡搞...
原标题:Linux之父炮轰英特尔:ECC内存很重要,不好买都怪你胡搞 Linux之父炮轰英特尔:ECC内存很重要,不好买都怪你胡搞 原创PCEVA评测室2021-01-06 11:31:08 很多人认 ...
- 算法模版:暴力搜索之DFS【沈七】
本文已收录于专栏 ⭐️ <算法通关笔记>⭐️ 算法模版:暴力搜索之DFS 前言 基本概念 算法思想 常用模板 三种枚举方式 指数型枚举 排列型枚举 组合型枚举 完结散花 题目练习 参考文章 ...
- hdu 4740 The Donkey of Gui Zhou(暴力搜索)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4740 [题意]: 森林里有一只驴和一只老虎,驴和老虎互相从来都没有见过,各自自己走过的地方不能走第二次 ...
- C++ 暴力搜索String pattern search字符串模式的实现算法(附完整源码)
C++暴力搜索String pattern search字符串模式的实现算法 C++暴力搜索String pattern search字符串模式的实现算法完整源码(定义,实现,main函数测试) C+ ...
- 牛客练习赛24题解(搜索,DP)
A题,C题不讲,基础题(但是我要抨击一下这次比赛,卡cin,cout,卡的太狠了,根本就不让过的那种,QAQ) 链接:https://www.nowcoder.com/acm/contest/157/ ...
- 三子棋の胜负判断(洛谷P1838题题解,Java语言描述)
题目要求 P1838题目链接 分析 我在想是不是要把这个题再写成扫雷那样的矩阵判断,想换个feel,那就用Set来处理. 众所周知Set有好处,查找快,虽说这只是九宫格三子棋,但contains()就 ...
- 搜索 —— 暴力搜索
[暴力搜索] 暴力搜索,就是将所有情况都举出,并判断其是否符合题目条件.其基本方法是分析题意后,找到一个合适的维度列举每一个元素,以完成题目. 一般主流的 OJ 中,1000ms 的时间限制下可以运行 ...
- 2016蓝桥杯C++A组第六题 寒假作业【暴力搜索】
原题: 现在小学的数学题目也不是那么好玩的. 看看这个寒假作业:□ + □ = □□ - □ = □□ × □ = □□ ÷ □ = □(如果显示不出来,可以参见[图1.jpg])每个方块代表1~13 ...
- 【NOIP2002】【Luogu1037】产生数(高精乘低精,DFS暴力搜索)
problem 给定一个整数n和k个变换规则(一位数可变换成另一个一位数) 经过任意次的变换( 0 次或多次),能产生出多少个不同整数 n < 1e30, k <= 15 例: n=234 ...
最新文章
- 降Mail十八章(上)
- Linux如何关机与关机命令祥解
- js 对象和Json的转换,js及深度复制
- consul代理---健康检测
- 开源游戏引擎_Hatchit:开源游戏引擎
- web在session设置的账户用户名显示为空_海蜘蛛路由Web认证怎么设置 海蜘蛛路由Web认证方法【介绍】...
- 应用程序正常初始化(0xc015002)失败解决方法
- perl语言书籍教程推荐
- eigen 矩阵求逆_「伴随矩阵」Eigen库 矩阵基本操作:转置矩阵,逆矩阵,伴随矩阵,特征值 - seo实验室...
- 分槽ALOHA协议仿真
- 在excel中如何筛选重复数据_高级筛选,让重复的数据记录无处可逃
- git -- git emoji列表(github commit 前面的小icon)
- Word控件Spire.Doc 【页面设置】教程(9) 如何在 C# 中添加行号
- oracle中的crs,Oracle CRS简介
- Wenli Zou's homepage
- 专业!“5G消息” VS “微信” 对比研究报告出炉!
- 笔记︱金融风险控制基础常识——巴塞尔协议+信用评分卡Fico信用分
- 杂记,生源地招生路线规划问题
- Mac安装使用eudic欧路词典最新版本-Version 3.9.1 (1032)
- 20180130心情总结
热门文章
- 帮网管省心省力的koomail公共地址薄
- 家族关系查询系统程序设计算法思路_数据结构设计(家族关系查询系统)汇编.doc...
- Python 中有 3 个不可思议的返回功能
- 多台主机共享一套鼠标键盘(跨屏鼠标键盘)
- Erphplogin Pro 连接QQ/微博/微信登录/弹窗登录 WordPress插件
- 一个农民工自学java找到工作的励志故事
- 读完研继续读博还是先工作几年再读博好一些?
- Kubernetes 高可用集群部署
- 杨震霆(carboy) -传奇人物
- Vuex-状态管理(24)