Flip Game(2021-TRN1-K)

题目大意

传送门

这个和poj 1222有点类似(其实那道题更难一点)
大意是说,在一个4*4的棋盘上面(姑且称作棋盘)的每一个格子里都放着一个棋子。棋子比较特殊,一面是黑的,一面是白的。可以通过翻棋子来改变棋子的颜色。每翻一个棋子,这个棋子的颜色肯定变了,而该棋子周围的棋子也会随之变颜色。
求最少的步骤。

题目解析

典型的DFS,不需要太多的剪枝。这个论断的得出是因为DFS的本质是枚举。而显然,每一个棋子我们都可以选择翻开或者不翻开,一共就有2^16次方种可能。这个计算量是很小的。而poj 1222那道题格子更多,暴力DFS可能就会超时了。
怎么枚举呢?就是从左到右,从上到下。枚举两种情况:翻开了,或者不翻开来。这种枚举不是没见过。然后回溯。

然而做的时候还是捉襟见肘,居然一开始还没有意识到有的棋子可以不翻开 还有就是写DFS有一段时间没写,手生了,连step作为函数参数,还有哪些要回溯一开始都没有想清楚,人没了。。。

代码

#include <bits/stdc++.h>using namespace std;
int a[5][5];
char str[5][5];
int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
int mini=1e8;
int check()
{int i,j,sum=0;for(i=1;i<=4;i++){for(j=1;j<=4;j++){sum+=a[i][j];}}if(sum==0||sum==16) return 1;return 0;
}
void flip(int x,int y)
{a[x][y]^=1;for(int k=0;k<4;k++){int newx=x+dir[k][0];int newy=y+dir[k][1];if(newx>=1&&newx<=4&&newy>=1&&newy<=4){a[newx][newy]^=1;}}
}
void dfs(int x,int y,int step)
{if(step>16) return;///16个格子都翻过了,不用继续深搜if(check()){if(step<mini) mini=step;return;}if(y>=5){x++;y=1;}if(x>=5) return;flip(x,y);dfs(x,y+1,step+1);///翻开棋子flip(x,y);///回溯dfs(x,y+1,step);///不翻开棋子
}
void init()
{int i,j;for(i=1;i<=4;i++){for(j=0;j<4;j++){if(str[i][j]=='b') a[i][j+1]=1;else a[i][j+1]=0;}}
}
int main()
{int i;for(i=1;i<=4;i++){gets(str[i]);}init();dfs(1,1,0);if(mini<=16) printf("%d\n",mini);else printf("Impossible\n");return 0;
}

Flip Game(2021-TRN1-K)相关推荐

  1. 【题解报告】ZJNU综合训练(2021.1.26)

    [题解报告]ZJNU综合训练(2021.1.26) B C D F H I J M 综合训练 ZJNU综合训练(2021.1.26) B:DP+搜索 | CF 1057C C:组合数学+dp | CF ...

  2. 【金三银四】Java集合面试题(2021最新版)

    目录 前言 一.集合容器概述 1. 什么是集合 2. 集合的特点 3. 集合和数组的区别 4. 使用集合框架的好处 5. 常用的集合类有哪些? 6. List,Set,Map三者的区别? 7. 集合框 ...

  3. 推进大数据中心新能源应用 广东省六部门联合印发培育新能源战略性新兴产业集群行动计划(2021—2025年)...

    9月29日,广东省发改委.能源局.科技厅.工信厅以及省自然资源厅.省生态环境厅联合印发<广东省培育新能源战略性新兴产业集群行动计划(2021-2025年)>.行动计划中指定的新能源产业领域 ...

  4. 面经——小米面经(2021春招)

    摘自:小米面经(2021春招)--感谢小米.感谢雷总.感谢上官可编程 作者:阿波罗啦啦啦啦 发布时间: 2021-05-01 11:08:41 网址:https://blog.csdn.net/wei ...

  5. 《天际友盟DRP数字风险防护报告(2021年上半年)》重磅发布

    今天,数字化正在发生,整个社会正在步入数字化革新.根据市场研究公司IDC的预测,到2023年超过50%的全球经济将由数字经济所驱动.在中国,2021-2024数字化转型总支出将达到1.5万亿美元,年均 ...

  6. 读论文——Pre-Training with Whole Word Masking for Chinese BERT(2021 11.25)

    第一遍 标题以及作者(2021 11.25) 摘要 本文基于BERT,在RoBERTa上进行一系列改进,提出了用于中文的预训练模型MacBERT. 提出了一种新的掩码策略,MLM as correct ...

  7. 《郑州市数据中心产业发展规划(2021—2025年)》发布

    10月25日,为支撑数字经济发展和数字郑州建设,郑州市政府印发了<郑州市数据中心产业发展规划(2021-2025年)>(以下简称<规划>). <规划>提出,到202 ...

  8. 市面上主流编辑器介绍(2021/05/20)

    市面上主流编辑器介绍(2021/05/20) 背景 Markdown是一种有用的轻量级标记语言,后续Markdown简写为md. 富文本编辑器(Rich Text Editor,RTE)是一种可内嵌于 ...

  9. 知网根据作者及单位检索文献汇总到Excel(2021.6.9)

    依据作者及单位在知网检索文献汇总至Excel 实践(2021.6.9) 1.知网依据作者及单位检索文献 1.1 检索实例(29条结果) 1.1.1 20个页面每页显示20条检索结果 1.1.2 1个页 ...

  10. 《中华人民共和国消防法》(2021年修订版)解读

    <中华人民共和国消防法>(2021年修订版)解读 总分:100 及格分数:60 考试剩余时间: 1时 53分 08秒 窗体顶端 单选题(共7题,每题5分) 1.举办大型群众性活动,承办人应 ...

最新文章

  1. java实现时间的比较
  2. 隐藏十年竟无人发现!Sudo 漏洞被曝出:无需密码就能获取 root 权限
  3. linux中的while命令
  4. pip已经下载了,但vscode报错ModuleNotFoundError: No module named ‘xxx‘
  5. 如何创建 Code Snippet
  6. 自定义的命民空间在其他程序集里无法调用
  7. matlab 判断文件有多少行,在Matlab中有没有办法确定文件中的行数,而不是循环遍历每一行?...
  8. element更改表格表头、行、指定单元格样式
  9. ajax设置自定义请求头信息
  10. C++工作笔记-对容器模板的初步认识
  11. 给Win32 GUI程序增加控制台窗口的方法
  12. python彩票预测与分析_130期柳无尘双色球预测奖号:红球和值分析
  13. 绍兴文理学院计算机网络期末,绍兴文理学院高频电子线路期末考试题.doc
  14. HotSpot虚拟机的垃圾收集算法实现
  15. 【Linux】一步一步学Linux——atq命令(139)
  16. FileZilla下载文件失败 local: unable to open C:/xxx/xxx
  17. openFrameworks实现的简单捕鱼游戏
  18. 交互式视频h5_H5P:用于创建HTML5交互式内容的CMS插件
  19. java调用腾讯地图根据经纬度获取位置信息
  20. C++ swap用法

热门文章

  1. EDIMAX AC1200 Linux Driver
  2. java实现第四届蓝桥杯有理数类
  3. 如何用Wireshark软件对app进行流量分析
  4. 解码投资浪潮,跨链 DeFi 如何成为下一块淘金地?
  5. Chrome无法自动填充用户名和密码
  6. python调用浏览器
  7. 不要再被Python洗脑了
  8. 农商行计算机考英语,2018农村信用社(农商行)考试 计算机每日一练+答案
  9. 判断一个整数是否为质数/素数
  10. 各路高手谈谈手工焊接贴片元件的方法、经验