【位运算DFS/DLX】【HDU1426】【数独】
题意:标准的一道数独题
DFS做法:
将横纵九宫格里的数字用位运算状态压缩,且可以通过逻辑或来确定总共有哪些数字被选择了,很方便也很快,代码如下
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <ctime>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#define oo 0x13131313
using namespace std;
char MAP[30][30];
int ANS[30][30];
int x[30],y[30],z[30];
int nx[30]={0,1,1,1,4,4,4,7,7,7};
int ny[30]={0,1,4,7,1,4,7,1,4,7};
int nn[20][20];
void init()
{freopen("a.in","r",stdin);freopen("a.out","w",stdout);
}
void input()
{memset(x,0,sizeof(x));memset(y,0,sizeof(y));memset(z,0,sizeof(z));memset(ANS,0,sizeof(ANS));for(int i=2;i<=9;i++)gets(MAP[i]);gets(MAP[10]);for(int i=1;i<=9;i++)for(int j=0;j<=16;j=j+2)if(MAP[i][j]!='?') x[i]=(x[i]|(1<<MAP[i][j]-'0')),ANS[i][((j/2)+1)]=MAP[i][j]-'0',y[((j/2)+1)]=(y[((j/2)+1)]|(1<<(MAP[i][j]-'0')));for(int k=1;k<=9;k++)for(int i=nx[k];i<=nx[k]+2;i++)for(int j=ny[k];j<=ny[k]+2;j++){if(MAP[i][((j-1)*2)]!='?') z[k]=(z[k]|(1<<(MAP[i][((j-1)*2)]-'0')));nn[i][j]=k;}
}
int dfs(int X,int Y)
{int XX=X,YY=Y;if(YY+1<=9) YY++;else XX++,YY=1;if(X==10) return 1;else{if(ANS[X][Y]!=0) {if(dfs(XX,YY)) return 1;}else{int xxx=x[X],yyy=y[Y],zzz=z[nn[X][Y]];int t=x[X]|y[Y]|z[nn[X][Y]];for(int i=1;i<=9;i++){if((1&(t>>i))==0){ANS[X][Y]=i;x[X]=(x[X]|(1<<i));y[Y]=(y[Y]|(1<<i));z[nn[X][Y]]=(z[nn[X][Y]]|(1<<i));if(dfs(XX,YY)) return 1;ANS[X][Y]=0;x[X]=xxx;y[Y]=yyy;z[nn[X][Y]]=zzz;}}}}return 0;
}
void solve()
{dfs(1,1);for(int i=1;i<=9;i++){for(int j=1;j<=9;j++){printf("%d",ANS[i][j]);if(j!=9) printf(" ");}printf("\n");}
}
int main()
{// init();int Case=0;while(gets(MAP[1])){if(Case++) printf("\n");input();solve();}
}
DLX 做法待研究
转载于:https://www.cnblogs.com/zy691357966/p/5480402.html
【位运算DFS/DLX】【HDU1426】【数独】相关推荐
- 【NOIP2009】【DLX】【位运算】T4 靶形数独 题解
小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教,Z 博士拿出了他最近发明的"靶形 ...
- HDU2553_N皇后_位运算DFS
题目大意:N皇后 解题思路:用位运算dfs. 代码: #include using namespace std;int tal,sum; int n;void dfs(int row,int ld,i ...
- USACO2.1【bfs,排序,贪心,dfs,位运算】
前言 开始刷USACO的题了. 正题 刷前必备技能:OI常识,bfs,dfs,位运算,基础贪心,快速排序. T1:城堡 TheCastleThe CastleTheCastle 评测记录: https ...
- 紫书搜索 习题7-4 UVA - 818 Cutting Chains 暴力+dfs判环+位运算
题目链接: https://vjudge.net/problem/UVA-818 题意: 选几个圆环去open.然后该圆环和其他就断开了.然后用这些open的圆环去连接剩下的圆环[最后打开的会合上], ...
- 洛谷P1562 还是N皇后(DFS+状态压缩+位运算)
八皇后问题的介绍在此不再赘述,只贴一下经典八皇后问题的实现代码(参考刘汝佳 <算法竞赛入门经典>) void search(int i) {if(i>n){ans++;return; ...
- UVALive 3351 Easy and Not Easy Sudoku Puzzles 位运算~判断简单数独
题意:给定一个9*9的数独,要求判断是否为简单数独. 数独:对于每一行每一列或者子方格内,只能填1~9这几个数,并且每个数字只能出现一次,比如说: 如果一个9*9的数独是简单数独的话,这个数独的解是独 ...
- 动态规划+BFS+DFS+回溯+红黑树+排序+链表+位运算(B站优质学习资源链接,后续会继续更新)
动态规划 正月点灯笼(UP主) 个人主页 https://space.bilibili.com/24014925/channel/detail?cid=12580 动态规划第一讲 https://ww ...
- 有趣的二进制—高效位运算
2019独角兽企业重金招聘Python工程师标准>>> 上一篇<有趣的二进制>我们讲到二进制的一些基础知识,但没有讲到位运算,有同学大呼不过瘾,那这一篇主要讲解下位运算的 ...
- 超有趣的二进制—高效位运算秒懂
附Java/C/C++/机器学习/算法与数据结构/前端/安卓/Python/程序员必读书籍书单大全: 书单导航页(点击右侧 极客侠栈 即可打开个人博客):极客侠栈 ①[Java]学习之路吐血整理技术书 ...
最新文章
- Python之%s%d%f
- MongoDB ( 五 )高级_管理:用户的创建、删除与修改
- hadoop 写入mysql_使用MapReducer将文件写入mysql 数据库
- centos build-essential 报错
- 简化Java中的异常处理
- html中隐藏单元格上边框,HTML table 标签边框问题(隐藏表格边框、单元格边框等)...
- webpack2终极优化
- 函数凸性与Jensen不等式
- JavaWebDay13_课程回顾,Tomcat软件,Servlet入门.
- Surface Pro的MicroSDHC卡测速
- 化学专业有必要学python吗-cnBeta.COM - 中文业界资讯站
- ListNode的理解
- 双系统下卸载ubuntu 20.04再安装ubuntu 18.04的相关方法、软件以及出现ACPI Error错误和解决办法
- R语言使用duplicated函数去除重复项
- 一、在GPU上执行运算
- 关闭Pinterest通知
- 淘宝,天猫,京东,苏宁抢购茅台、手机等脚本(适合兼职,亲测可用)
- mysql 事务隔离界别_mysql/mariadb知识点总结(21):事务隔离级别 (事务总结之三)...
- 下载xlsx表格 和 上传xlsx表格 方法 适用于vue react
- 开源云计算厂商,你有渠道么?