题意:标准的一道数独题

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】【数独】相关推荐

  1. 【NOIP2009】【DLX】【位运算】T4 靶形数独 题解

    小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教,Z 博士拿出了他最近发明的"靶形 ...

  2. HDU2553_N皇后_位运算DFS

    题目大意:N皇后 解题思路:用位运算dfs. 代码: #include using namespace std;int tal,sum; int n;void dfs(int row,int ld,i ...

  3. USACO2.1【bfs,排序,贪心,dfs,位运算】

    前言 开始刷USACO的题了. 正题 刷前必备技能:OI常识,bfs,dfs,位运算,基础贪心,快速排序. T1:城堡 TheCastleThe CastleTheCastle 评测记录: https ...

  4. 紫书搜索 习题7-4 UVA - 818 Cutting Chains 暴力+dfs判环+位运算

    题目链接: https://vjudge.net/problem/UVA-818 题意: 选几个圆环去open.然后该圆环和其他就断开了.然后用这些open的圆环去连接剩下的圆环[最后打开的会合上], ...

  5. 洛谷P1562 还是N皇后(DFS+状态压缩+位运算)

    八皇后问题的介绍在此不再赘述,只贴一下经典八皇后问题的实现代码(参考刘汝佳 <算法竞赛入门经典>) void search(int i) {if(i>n){ans++;return; ...

  6. UVALive 3351 Easy and Not Easy Sudoku Puzzles 位运算~判断简单数独

    题意:给定一个9*9的数独,要求判断是否为简单数独. 数独:对于每一行每一列或者子方格内,只能填1~9这几个数,并且每个数字只能出现一次,比如说: 如果一个9*9的数独是简单数独的话,这个数独的解是独 ...

  7. 动态规划+BFS+DFS+回溯+红黑树+排序+链表+位运算(B站优质学习资源链接,后续会继续更新)

    动态规划 正月点灯笼(UP主) 个人主页 https://space.bilibili.com/24014925/channel/detail?cid=12580 动态规划第一讲 https://ww ...

  8. 有趣的二进制—高效位运算

    2019独角兽企业重金招聘Python工程师标准>>> 上一篇<有趣的二进制>我们讲到二进制的一些基础知识,但没有讲到位运算,有同学大呼不过瘾,那这一篇主要讲解下位运算的 ...

  9. 超有趣的二进制—高效位运算秒懂

    附Java/C/C++/机器学习/算法与数据结构/前端/安卓/Python/程序员必读书籍书单大全: 书单导航页(点击右侧 极客侠栈 即可打开个人博客):极客侠栈 ①[Java]学习之路吐血整理技术书 ...

最新文章

  1. Python之%s%d%f
  2. MongoDB ( 五 )高级_管理:用户的创建、删除与修改
  3. hadoop 写入mysql_使用MapReducer将文件写入mysql 数据库
  4. centos build-essential 报错
  5. 简化Java中的异常处理
  6. html中隐藏单元格上边框,HTML table 标签边框问题(隐藏表格边框、单元格边框等)...
  7. webpack2终极优化
  8. 函数凸性与Jensen不等式
  9. JavaWebDay13_课程回顾,Tomcat软件,Servlet入门.
  10. Surface Pro的MicroSDHC卡测速
  11. 化学专业有必要学python吗-cnBeta.COM - 中文业界资讯站
  12. ListNode的理解
  13. 双系统下卸载ubuntu 20.04再安装ubuntu 18.04的相关方法、软件以及出现ACPI Error错误和解决办法
  14. R语言使用duplicated函数去除重复项
  15. 一、在GPU上执行运算
  16. 关闭Pinterest通知
  17. 淘宝,天猫,京东,苏宁抢购茅台、手机等脚本(适合兼职,亲测可用)
  18. mysql 事务隔离界别_mysql/mariadb知识点总结(21):事务隔离级别 (事务总结之三)...
  19. 下载xlsx表格 和 上传xlsx表格 方法 适用于vue react
  20. 开源云计算厂商,你有渠道么?

热门文章

  1. NDK学习笔记-多线程与生产消费模式
  2. No bean named 'dataSource' is defined
  3. Python函数Day1
  4. 天天沉迷于皇上本宫的都是sb
  5. [PHP] 遗传算法求函数最大值一般实现
  6. Python3.X新特性之print和exec
  7. POJ 1091 跳蚤
  8. gsmake —— golang版gradle
  9. EXCEL 中找出两个sheet相同列
  10. 互联网金融下一个风口的或许在新农业领域?