HDU-6341 Problem J. Let Sudoku Rotate(dfs 剪枝)
题目:有一个4*4*4*4的数独,每一横每一竖每一个小方块中都无重复的字母,即都为0-9,A-F.。有一个已经填好的数独,若干个4*4的方块被逆时针拧转了若干次,问拧转回来至少需要多少次。
分析:很明显的一道深授暴力题 , 一开始不知道是怎么收才好 , 那时候考虑说假如同一行或者同一列都有区域要反转 , 我该怎么找 , 后来看了题解后发现 , 我只要保证每次旋转后 , 该区域与此前的区域是满足数独的就好 , 子问题的不重复不会影响到大问题的不重复 。深搜索的能力需要加强
#include<bits/stdc++.h> using namespace std ; int G[20][20],tmp[20][20]; bool vis[20]; int ans; void rot(int x , int y) {for(int i=1;i<=4;i++)for(int j=1;j<=4;j++)tmp[j][4-i+1]=G[(x-1)*4+i][(y-1)*4+j];for(int i=1;i<=4;i++)for(int j=1;j<=4;j++)G[(x-1)*4+i][(y-1)*4+j]=tmp[i][j]; }bool check(int x , int y) {for(int i=4*x-3 ; i<=x*4 ; i++){memset(vis,0,sizeof(vis));for(int j=1 ; j<=4*y ; j++){if(!vis[G[i][j]])vis[G[i][j]]=1;else return 0;}}for(int i=y*4-3 ; i<=y*4 ; i++){memset(vis,0,sizeof(vis));for(int j=1 ; j<=4*x ; j++){if(!vis[G[j][i]])vis[G[j][i]]=1;else return 0;}}return 1; } void dfs(int x , int y , int sum) {if(ans<=sum)return ;int X=x , Y=y+1;if(x==5){ans=sum;return ;}if(Y==5){X++;Y=1;}for(int i=0 ; i<4 ; i++){if(i) rot(x,y);if(check(x,y)){ //printf("520");dfs(X,Y,sum+i);}}rot(x,y); } char s[20]; int main() {int t;scanf("%d",&t);while(t--){for(int i=1 ; i<=16 ; i++){scanf("%s",s+1);for(int j=1 ; j<=16 ; j++){if(s[j]>='0'&&s[j]<='9')G[i][j]=s[j]-'0';elseG[i][j]=s[j]-'A'+10;}}ans=0x3f3f3f3f;dfs(1,1,0);printf("%d\n",ans);}return 0; }
View Code
转载于:https://www.cnblogs.com/shuaihui520/p/10324549.html
HDU-6341 Problem J. Let Sudoku Rotate(dfs 剪枝)相关推荐
- 【HDU - 1518】Square (经典的dfs + 剪枝)
题干: Given a set of sticks of various lengths, is it possible to join them end-to-end to form a squar ...
- HDU - 6435 Problem J. CSGO 多维最远曼哈顿距离+原理 2018多校-10
题意: 给定 n个物品A 和 m个物品B:每个物品都有一个值 s 和 k 个属性值 x[i], 问:从n个物品中选一个 i,m个物品里选一个 j,ans = i_s + j_s + Sigma( | ...
- Problem J: 神医胡青牛
Problem J: 神医胡青牛 题目: 胡青牛是"倚天屠龙记"中的神医,每天都有N多(N<=2000)的人来求他治病,这些人排成一队,从1开始编号直到N ,每个人手里都拿着 ...
- 图算法—Problem J
图算法-Problem J 题意 题目大意是给一个图.起点为1,终点为2:然后点a到点b是合法的判断是当b存在一个到终点的距离小于a到终点的最小距离.求从起点到终点的路径数. 解题思路 我的做法是di ...
- 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 ...
- Codeforces Gym 100342J Problem J. Triatrip 求三元环的数量 bitset
Problem J. Triatrip Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100342/at ...
- HDU 6343.Problem L. Graph Theory Homework-数学 (2018 Multi-University Training Contest 4 1012)
6343.Problem L. Graph Theory Homework 官方题解: 一篇写的很好的博客: HDU 6343 - Problem L. Graph Theory Homework - ...
- 2019 ICPC World Finals Problem J. Miniature Golf
2019 ICPC World Finals Problem J. Miniature Golf Solution 设lll为l0l_0l0时iii的总分为si,l0s_{i,l_0}si,l0 ...
- 华农oj Problem J: 幻化【贪心/抽屉原理】
Problem J: 幻化 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 18 Solved: 3 [Submit][Status][Web Board ...
最新文章
- 计算机安装操作系统的目的是什么,安装计算机操作系统.doc
- matlab 高斯函数_光学与matlab:高斯光的模拟
- 从自监督到全监督!Google 提出新损失函数SupCon,准确率提升2%!
- log4j记录不同的日志_Spring boot中使用log4j记录日志
- 第二周HTML总结3
- 阿里云解决方案架构师徐翔:云上安全建设实战
- 信号与系统第四章总结
- 计算机网页制作保存,不使用任何工具轻松保存网页资源的法子
- TalkingData :如何做到30分钟内完成对数十亿受众数据的分析 | 会员专栏
- html 5 游戏 脚本,HTML 5开发RPG游戏之四(游戏脚本化)(2)
- 用python写字动画_Duang!用Python来实现唱歌、跳舞、写字、画画?无所不能的pyt
- LocalSend 电脑和手机互传软件教程解答手机端无法搜索到电脑的解决方案
- HTTP请求头字段解释
- Android 使用FTP实现上传、下载等功能
- 第六期 自定义IP添加-PWM 基于ARTY A7的MicroBlaze系统搭建与应用
- [CF1383A]String Transformation 1
- win11找不到恢复环境怎么恢复出厂设置
- PMP之项目经理的角色
- 通过DIVA了解APP安全问题
- 数据库:CHAR,VARCHAR,TEXT,ENUM ,SET,BINARY,VARBINARY 列的完整性约束
热门文章
- 江苏计算机等级考试试卷,江苏省计算机等级考试程序设计 试卷.docx
- 硬盘安装Linux救援系统,通过急救系统里往硬盘里安装 alpine linux
- python null怎么表示_[Python] @NotNull装饰器如何写比较好?
- 主板有电无法启动_主板通电但不能启动怎么回事
- 永大电梯小键盘服务器显示黑色条杠,永大电梯小键盘操作手顺
- android设置自动开关机,Android开发之设置开机自动启动的几种方法
- SQL的Join使用图解教程
- 微软邮件系统Exchange 2013系列(七)创建发送连接器
- ASP.NET MVC view引入命名空间
- Spring 基础概念——DI、IOC(一)