0代表可放 1带表不能放 每次放一个2*2的方块 不能放者败
如果先手必胜则输出Yes

必胜态:从当前状态所能到达的状态中存在一个必败态
必败态:从当前状态所能达到的状态全部是必胜态

Sample Input
4 4
0000
0000
0000
0000
4 4
0000
0010
0100
0000

Sample Output
Yes
No

 1 # include <iostream>
 2 # include <cstdio>
 3 # include <cstring>
 4 # include <algorithm>
 5 # include <string>
 6 # include <cmath>
 7 # include <queue>
 8 # include <list>
 9 # define LL long long
10 using namespace std ;
11
12 char str[50][50];
13 int p[50][50];
14 int n,m;
15 int dfs()
16 {
17     int i,j,flag;
18     flag = 0;
19     for(i = 0;i < n-1;i ++)
20     {
21         for(j = 0;j < m-1;j ++)
22         {
23             if(p[i][j] == 0&&p[i+1][j] == 0&&p[i][j+1] == 0&&p[i+1][j+1] == 0)
24             {
25                 p[i][j] = p[i+1][j] = p[i][j+1] = p[i+1][j+1] = 1;
26                 if(dfs() == 0) //子状态存在必败态
27                 flag = 1;
28                 p[i][j] = p[i+1][j] = p[i][j+1] = p[i+1][j+1] = 0;
29             }
30         }
31     }
32     if(flag)
33     return 1;
34     else
35     return 0;
36 }
37 int main()
38 {
39     int i,j;
40     while(scanf("%d%d",&n,&m)!=EOF)
41     {
42         for(i = 0; i < n; i ++)
43             scanf("%s",str[i]);
44         for(i = 0; i < n; i ++)
45         {
46             for(j = 0; j < m; j ++)
47             {
48                 if(str[i][j] == '0')
49                 p[i][j] = 0;
50                 else
51                 p[i][j] = 1;
52             }
53         }
54         if(dfs())
55         printf("Yes\n");
56         else
57         printf("No\n");
58     }
59     return 0;
60 }

View Code

转载于:https://www.cnblogs.com/mengchunchen/p/4855208.html

hdu 1760 DFS+博弈相关推荐

  1. hdu 1760 A New Tetris Game(搜索博弈)

    题目链接:hdu 1760 A New Tetris Game 题意: 给你一个矩阵,0表示可以放格子,现在给你2*2的格子,lele先放,问是否能赢. 题解: 爆搜.具体看代码 1 #include ...

  2. HDU 1564 简单博弈 水

    n*n棋盘,初始左上角有一个石头,每次放只能在相邻的四个位置之一,不能操作者输. 如果以初始石头编号为1作为后手,那么对于每次先手胜的情况其最后一步的四周的编号必定是奇数,且此时编号为偶数,而对于一个 ...

  3. hdu 4751(dfs染色)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4751 思路:构建新图,对于那些两点连双向边的,忽略,然后其余的都连双向边,于是在新图中,连边的点是能不 ...

  4. hdu 3560(dfs判环)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3560 思路:dfs判环,这里成环的条件是环中的每个点的出度和入度都为1,因此dfs的时候只须判断的相连 ...

  5. hdu 1849 nim博弈

    http://acm.hdu.edu.cn/showproblem.php?pid=1849 Nim博弈 算法分析: Nim游戏模型:有三堆石子,分别含有a.b.c个石子.两人轮流从某一堆中取任意多的 ...

  6. HDU 2212 DFS (伪·DFS)

    链接 : http://acm.hdu.edu.cn/showproblem.php?pid=2212 本来是想练下DFS的,结果被题目标题坑了(HDU也搞标题党?),更坑的是题还这么水 直接输出四个 ...

  7. hdu 1175 DFS连连看

    题意:中文题就不说了. 思路:DFS,关键是那个转折大于两次就不行的情况怎么深搜,可以枚举递归起始点的四个方向,如果在DFS中的方向K和递归中的不一样而且还满足深搜条件,那么转折次数就加一. 这道题W ...

  8. poj 1564 Sum It Up | zoj 1711 | hdu 1548 (dfs + 剪枝 or 判重)

    Sum It Up Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Sub ...

  9. hdu 2516 FIB博弈模型

    题目来源: http://acm.hdu.edu.cn/showproblem.php?pid=2516 分析: 当石子个数为 fabonacii 数时, 为必败态. 代码如下: LL fib[60] ...

最新文章

  1. Algs4-1.3.33一个双向队列Deque-双向链表实现
  2. Erlang--热更新
  3. 在脚本中调用psql如何自动输入密码
  4. leetcode C++ 4. 寻找两个有序数组的中位数 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log
  5. 如何在大学和工作后让自己逐渐变强?
  6. Java-Web机试练习题一、后台管理系统——管理员管理模块
  7. ---WebCam网络摄像头9 usb dirver
  8. java反射 获取局部变量_Java反射:如何获取变量的名称?
  9. 单选按钮带文字_一分钟教会你用Word添加单选框和复选框
  10. axure原件 总是丢失_Axure实现提示文本单击显示后自动消失的效果
  11. 获取referer中的请求参数_Servlet获取AJAX POST请求中参数以form data和request payload形式传输的方法...
  12. 设置虚拟机上的redis可以被windows的环境下的python访问连接
  13. 在Java中使用Jedis的测试案例
  14. c语言如何读文件,如何正确用C语言读取文件
  15. 智能AI文章伪原创工具免费使用注意事项与推荐
  16. html 画 斜线表头,HTML 斜线 表头
  17. 带你实现完整的视频弹幕系统
  18. 基于vue添加刻度线比例尺
  19. 三星电视机dns服务器维护,4招解救三星智能电视看视频卡顿问题
  20. C++STL之<set>和<map>

热门文章

  1. (IOS)BaiduFM 程序分析
  2. cocos2dx-3.2 运行第一个android程序
  3. RHive的安装和用法
  4. sqlserver调用msxml3.dll中的xmlhttp对象
  5. [冷枫推荐]:数据库操作,内外联查询,分组查询,嵌套查询,交叉查询,多表查询,语句小结。...
  6. 2021-04-04 CPU缓存一致性 MESI协议
  7. (229)DPU加速数据处理
  8. (85)FPGA约束有哪些-面试必问(九)(第17天)
  9. 水经注叠加cad_如何下载等高线并在CAD中与卫星影像叠加
  10. Python 语法糖