链接:

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. [转帖]NM_CONTROLLED的含义以及网卡配置参数

    NM_CONTROLLED的含义以及网卡配置参数 https://blog.csdn.net/z1014347942/article/details/78069966 学习一下 其实可以手工修改的. ...

  2. linux系统redis安装及使用

    1.下载redishttp://download.redis.io/releases/redis-5.0.5.tar.gz$ wget http://download.redis.io/release ...

  3. 网易Java程序员两轮面试,这些问题你能答对几个?

    一转眼,2018 年已经过去了,你是否在满意的公司?拿着理想的薪水? 虽然"钱多.事少.离家近"的工作可能离技术人比较远,但是找到一份合适的工作,其实并不像想象中那么难.但是,有些 ...

  4. MySQL中的DML、DQL和子查询

    一.MySQL中的DML语句 1.使用insert插入数据记录: INSERT INTO `myschool`.`student` (`studentNo`, `loginPwd`, `student ...

  5. RHEL8运维新利器--Cockpit使用方法

    在web浏览器中查看服务器并使用鼠标执行系统任务,很容易管理存储.配置网络和检查日志等操作. # 安装cockpit yum -y install cockpit # 启用cockpit system ...

  6. 一次简单的springboot+dubbo+flume+kafka+storm+redis系统

    最近无事学习一下,用springboot+dubbo+flume+kafka+storm+redis做了一个简单的scenic系统 scenicweb:展现层,springboot+dubbo sce ...

  7. javascript——== 和===的区别

    == 等于 === 全等(值和类型) console.log(5==5);//true console.log(5=="5");//true console.log(5===5); ...

  8. arcgisJs之featureLayer中feature的获取

    arcgisJs之featureLayer中feature的获取 在featureLayer中source可以获取到一个Graphic数组,但是这个数组属于原数据数组.当使用 applyEdits修改 ...

  9. JavaScript的常用浏览器设置

    用什么浏览器?如果您不告诉我您使用的浏览器,我将告诉您有关JavaScript的常用浏览器设置.~火狐在菜单栏中选择工具->选项->内容以查看启用javascript的选项.Interne ...

  10. yii2-cache组件第三个参数Dependency $dependency的作用浅析

    用法如下: $cache->set($key, $result, Configs::instance()->cacheDuration, new TagDependency([ 'tags ...