链接:

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-数独(搜索)的更多相关文章

  1. AcWing 166. 数独

    题目地址 https://www.acwing.com/problem/content/description/168/ 题目描述 数独是一种传统益智游戏,你需要把一个9 × 9的数独补充完整,使得图 ...

  2. 洛谷P1074 靶形数独 [搜索]

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

  3. 166. 数独 dancing links 方法

    dfs硬怼通过数独 N皇后的代码后 想学习下新的数据结构和算法来解决这类覆盖问题 习题练习 https://www.acwing.com/problem/content/168/ 数独 https:/ ...

  4. HDU - 5547 Sudoku(数独搜索)

    Description Yi Sima was one of the best counselors of Cao Cao. He likes to play a funny game himself ...

  5. B3109 [cqoi2013]新数独 搜索dfs

    就是基于普通数独上的一点变形,然后就没什么了,普通数独就是进行一边dfs就行了. 题干: 题目描述 输入格式 输入一共15行,包含一个新数独的实例.第奇数行包含左右方向的符号(<和>),第 ...

  6. Python搜索书名获取整本资源_笔趣阁

    前言 偶然一天把某项目文档传到手机上,用手机自带的阅读器方便随时拿出来查阅.看着我那好久没点开的阅读器,再看着书架上摆着几本不知道是多久之前导入的小说. 闭上眼,我仿佛看到那时候的自己.侧躺着缩在被窝 ...

  7. $NOIp$提高组历年题目复习

    写在前面 一个简略的\(NOIp\)题高组历年题目复习记录.大部分都有单独写题解,但懒得放\(link\)了\(QwQ\).对于想的时候兜了圈子的题打上\(*\). \(NOIp2018\ [4/6] ...

  8. [NOIP2009] 靶形数独(搜索+剪枝)

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

  9. hihoCoder #1321 : 搜索五•数独 (Dancing Links ,精确覆盖)

    hiho一下第102周的题目. 原题地址:http://hihocoder.com/problemset/problem/1321 题意:输入一个9*9数独矩阵,0表示没填的空位,输出这个数独的答案. ...

  10. Luogu P1074靶形数独【搜索/剪枝】By cellur925

    题目传送门 显然是一个搜索.但是开始没有任何的剪枝,暴力从\((1,1)\)点开始搜索,很自然地T了6个点. #include<cstdio> #include<algorithm& ...

随机推荐

  1. [转帖]什么是BSS/OSS,及区别和联系

    什么是BSS/OSS,及区别和联系 https://blog.csdn.net/jionghan3855/article/details/3856873 BSS:Business support sy ...

  2. ARC099E. Independence

    考虑一个子问题.给定无向图 $G$,如何判断能否将 $G$ 的点集分成两部分 $S$.$T$ 使得 $S$ 和 $T$ 导出的子图都是完全图? 这个问题把我难住了.解法是考虑 $G$ 的补图 $G'$ ...

  3. with上下文管理 python魔法方法

    with语法在Python里很常见, 主要的利好是使用代码更简洁. 常见的使用场景有: 1. 资源对象的获取与释放. 使用with可以简化try...finally ... 2. 在不修改函数代码的前 ...

  4. mybatis数组和集合的长度判断及插入

    1.在使用foreach的是collection属性,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的,主要有一下4种情况: 如果传入的是单参数且参数类型是一个List的时候,collect ...

  5. C# 添加log4net日志

    一.添加log4net的Nuget包 二.在Web.config或者App.config文件中添加log4net配置 代码: <log4net> <!-- OFF, FATAL, E ...

  6. Mockito中的@Mock和@Spy如何使用

    相同点 spy和mock生成的对象不受spring管理 不同点 1.默认行为不同 对于未指定mock的方法,spy默认会调用真实的方法,有返回值的返回真实的返回值,而mock默认不执行,有返回值的,默 ...

  7. 【weixin】微信h5支付

    一.使用场景 H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付. 主要用于触屏版的手机浏览器请求微信支付的场景.可以方便 ...

  8. 01 Go之环境搭建

    1.1 Linux搭建Go环境 1.ssh远程登录Linux服务器,可选用iTerm.xshell ssh root@ip 2.建议配置好阿里云yum源.epel源 安装git yum install ...

  9. 【踩坑经历】SQLSTATE[HY000] [2002] Connection refused

    使用docker搭建lnmp环境,使用的是分容器的搭建方案 框架使用thinkphp,想要连接数据MySQL,一直显示"SQLSTATE[HY000] [2002] Connection r ...

  10. hadoop-hive的内表和外表

    --创建内表create table if not exists employee(id int comment 'empoyeeid',dateincompany string comment 'd ...