题目:有一个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 剪枝)相关推荐

  1. 【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 ...

  2. 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( | ...

  3. Problem J: 神医胡青牛

    Problem J: 神医胡青牛 题目: 胡青牛是"倚天屠龙记"中的神医,每天都有N多(N<=2000)的人来求他治病,这些人排成一队,从1开始编号直到N ,每个人手里都拿着 ...

  4. 图算法—Problem J

    图算法-Problem J 题意 题目大意是给一个图.起点为1,终点为2:然后点a到点b是合法的判断是当b存在一个到终点的距离小于a到终点的最小距离.求从起点到终点的路径数. 解题思路 我的做法是di ...

  5. 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 ...

  6. Codeforces Gym 100342J Problem J. Triatrip 求三元环的数量 bitset

    Problem J. Triatrip Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100342/at ...

  7. 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 - ...

  8. 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​​ ...

  9. 华农oj Problem J: 幻化【贪心/抽屉原理】

    Problem J: 幻化 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 18 Solved: 3 [Submit][Status][Web Board ...

最新文章

  1. 计算机安装操作系统的目的是什么,安装计算机操作系统.doc
  2. matlab 高斯函数_光学与matlab:高斯光的模拟
  3. 从自监督到全监督!Google 提出新损失函数SupCon,准确率提升2%!
  4. log4j记录不同的日志_Spring boot中使用log4j记录日志
  5. 第二周HTML总结3
  6. 阿里云解决方案架构师徐翔:云上安全建设实战
  7. 信号与系统第四章总结
  8. 计算机网页制作保存,不使用任何工具轻松保存网页资源的法子
  9. TalkingData :如何做到30分钟内完成对数十亿受众数据的分析 | 会员专栏
  10. html 5 游戏 脚本,HTML 5开发RPG游戏之四(游戏脚本化)(2)
  11. 用python写字动画_Duang!用Python来实现唱歌、跳舞、写字、画画?无所不能的pyt
  12. LocalSend 电脑和手机互传软件教程解答手机端无法搜索到电脑的解决方案
  13. HTTP请求头字段解释
  14. Android 使用FTP实现上传、下载等功能
  15. 第六期 自定义IP添加-PWM 基于ARTY A7的MicroBlaze系统搭建与应用
  16. [CF1383A]String Transformation 1
  17. win11找不到恢复环境怎么恢复出厂设置
  18. PMP之项目经理的角色
  19. 通过DIVA了解APP安全问题
  20. 数据库:CHAR,VARCHAR,TEXT,ENUM ,SET,BINARY,VARBINARY 列的完整性约束

热门文章

  1. 江苏计算机等级考试试卷,江苏省计算机等级考试程序设计 试卷.docx
  2. 硬盘安装Linux救援系统,通过急救系统里往硬盘里安装 alpine linux
  3. python null怎么表示_[Python] @NotNull装饰器如何写比较好?
  4. 主板有电无法启动_主板通电但不能启动怎么回事
  5. 永大电梯小键盘服务器显示黑色条杠,永大电梯小键盘操作手顺
  6. android设置自动开关机,Android开发之设置开机自动启动的几种方法
  7. SQL的Join使用图解教程
  8. 微软邮件系统Exchange 2013系列(七)创建发送连接器
  9. ASP.NET MVC view引入命名空间
  10. Spring 基础概念——DI、IOC(一)