Acwing-166-数独(搜索)
链接:
https://www.acwing.com/problem/content/168/
题意:
数独是一种传统益智游戏,你需要把一个9 × 9的数独补充完整,使得图中每行、每列、每个3 × 3的九宫格内数字1~9均恰好出现一次。
请编写一个程序填写数独。
思路:
二进制记录每一行, 每一列, 每一块的数值使用情况, 每次从最小的开始枚举.
代码:
#include <bits/stdc++.h>
using namespace std;
char input[90];
char Map[10][10];
int Cnt[1000], Num[1000];
int row[10], col[10], gri[10];
int cnt;
int Lowbit(int x)
{
return x&(-x);
}
int GetP(int x, int y)
{
return (x/3)*3+(y/3);
}
void Change(int x, int y, int p)
{
row[x] ^= (1<<p);
col[y] ^= (1<<p);
gri[GetP(x, y)] ^= (1<<p);
}
bool Dfs(int las)
{
// cout << las << endl;
if (las == 0)
return true;
int tmp = 10, x, y;
for (int i = 0;i < 9;i++)
{
for (int j = 0;j < 9;j++)
{
if (Map[i][j] != '.')
continue;
int val = row[i]&col[j]&gri[GetP(i, j)];
if (val == 0)
return false;
if (Cnt[val] < tmp)
{
tmp = Cnt[val];
x = i, y = j;
}
}
}
int val = row[x]&col[y]&gri[GetP(x, y)];
while (val > 0)
{
int z = Num[Lowbit(val)];
Map[x][y] = z+'1';
Change(x, y, z);
if (Dfs(las-1))
return true;
Change(x, y, z);
Map[x][y] = '.';
val -= Lowbit(val);
}
return false;
}
int main()
{
for (int i = 0;i < (1<<9);i++)
{
for (int j = i;j > 0;j -= Lowbit(j))
Cnt[i]++;
}
for (int i = 0;i < 9;i++)
Num[1<<i] = i;
while (scanf("%s", input) && input[0] != 'e')
{
for (int i = 0;i < 9;i++)
{
for (int j = 0;j < 9;j++)
Map[i][j] = input[i*9+j];
}
for (int i = 0;i < 9;i++)
row[i] = col[i] = gri[i] = (1<<9)-1;
cnt = 0;
for (int i = 0;i < 9;i++)
{
for (int j = 0;j < 9;j++)
{
if (Map[i][j] != '.')
Change(i, j, Map[i][j]-'1');
else
cnt++;
}
}
Dfs(cnt);
for (int i = 0;i < 9;i++)
{
for (int j = 0;j < 9;j++)
input[i*9+j] = Map[i][j];
}
puts(input);
}
return 0;
}
Acwing-166-数独(搜索)的更多相关文章
- AcWing 166. 数独
题目地址 https://www.acwing.com/problem/content/description/168/ 题目描述 数独是一种传统益智游戏,你需要把一个9 × 9的数独补充完整,使得图 ...
- 洛谷P1074 靶形数独 [搜索]
题目传送门 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了 ...
- 166. 数独 dancing links 方法
dfs硬怼通过数独 N皇后的代码后 想学习下新的数据结构和算法来解决这类覆盖问题 习题练习 https://www.acwing.com/problem/content/168/ 数独 https:/ ...
- HDU - 5547 Sudoku(数独搜索)
Description Yi Sima was one of the best counselors of Cao Cao. He likes to play a funny game himself ...
- B3109 [cqoi2013]新数独 搜索dfs
就是基于普通数独上的一点变形,然后就没什么了,普通数独就是进行一边dfs就行了. 题干: 题目描述 输入格式 输入一共15行,包含一个新数独的实例.第奇数行包含左右方向的符号(<和>),第 ...
- Python搜索书名获取整本资源_笔趣阁
前言 偶然一天把某项目文档传到手机上,用手机自带的阅读器方便随时拿出来查阅.看着我那好久没点开的阅读器,再看着书架上摆着几本不知道是多久之前导入的小说. 闭上眼,我仿佛看到那时候的自己.侧躺着缩在被窝 ...
- $NOIp$提高组历年题目复习
写在前面 一个简略的\(NOIp\)题高组历年题目复习记录.大部分都有单独写题解,但懒得放\(link\)了\(QwQ\).对于想的时候兜了圈子的题打上\(*\). \(NOIp2018\ [4/6] ...
- [NOIP2009] 靶形数独(搜索+剪枝)
题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了他最近发明的 ...
- hihoCoder #1321 : 搜索五•数独 (Dancing Links ,精确覆盖)
hiho一下第102周的题目. 原题地址:http://hihocoder.com/problemset/problem/1321 题意:输入一个9*9数独矩阵,0表示没填的空位,输出这个数独的答案. ...
- Luogu P1074靶形数独【搜索/剪枝】By cellur925
题目传送门 显然是一个搜索.但是开始没有任何的剪枝,暴力从\((1,1)\)点开始搜索,很自然地T了6个点. #include<cstdio> #include<algorithm& ...
随机推荐
- gitlab不能启动了
gitlab意外停止后不能启动,执行gitlab-ctl start 提示全部启动失败. GitLab won’t start – runsv not running. Gitlab didn’t s ...
- Java利用模板生成pdf并导出
1.准备工作 (1)Adobe Acrobat pro软件:用来制作导出模板 (2)itext的jar包 2.开始制作pdf模板 (1)先用word做出模板界面 (2)文件另存为pdf格式文件 (3) ...
- hive的hiveserver2模式启动不起来,发现Hadoop一直处于安全模式
hive的hiveserver2模式启动不起来,发现Hadoop一直处于安全模式 命令介绍 命令hadoop fs –safemode get 查看安全模式状态 命令hadoop fs –safemo ...
- easyswoole报错:failed: Error during WebSocket handshake: Unexpected response code: 200
WebSocket connection to 'ws://www.xxxx.com/xxx/xx' failed: Error during WebSocket handshake: Unexpec ...
- 进阶Java编程(2)线程常用操作方法
线程常用操作方法 多线程的主要操作方法都在Thread类中定义的. 1,线程的命名和取得 多线程的运行状态是不确定的,那么在程序的开发之中为了可以获取到一些需要使用到的线程就只能依靠线程的名字来进行操 ...
- asp.net 10 Cookie & Session
Cookie 1.什么是Cookie 一小段文本,明文的数据,关于网站相关的文本字符串数据.一个客户端状态保持机制~ 存储在客户端的浏览器内存里面或者磁盘(如果不指定过期时间,那么存储在客户端浏览器内 ...
- Struts的相关基础
为什么要用struts? 1.该框架基予mvc的开发设计模式上的,所以拥有mvc的全部优点,他在M.V.C上都有涉及,但它主要是提供一个好的控制器和一套定制的标签库上,有mvc的一系列优点:层次分明, ...
- promise使用的正确方式
一开始恨不能理解下面的代码,为什么可以一直then下去,什么时候要直接return xxx,什么时候return 一个promise,什么时候用Promise.resolve() function ...
- Hyperledger Fabric(5)ChainCode的编写步骤
链码(chaincode) 会对 Fabric应用程序 发送的交易做出响应,执行代码逻辑,与 账本 进行交互. 再复习下他们之间的逻辑关系: Hyperledger Fabric 中,Chainco ...
- 8.4.Zookeeper结构和命令
1. Zookeeper结构 1.1.ZooKeeper数据模型Znode ZooKeeper拥有一个层次化的目录结构,命名符合常规文件系统规范 ZooKeeper树中的每个节点被称为—Znode,和 ...