9*9的数独(dfs)
蒜头君今天突然开始还念童年了,想回忆回忆童年。他记得自己小时候,有一个很火的游戏叫做数独。便开始来了一局紧张而又刺激的高阶数独。蒜头君做完发现没有正解,不知道对不对? 不知道聪明的你能否给出一个标准答案?
标准数独是由一个给与了提示数字的 9×99 \times 99×9 网格组成,我们只需将其空格填上数字,使得每一行,每一列以及每一个 3×33 \times 33×3 宫都没有重复的数字出现。
用结构体去保存输入中的空白(0),真精明,化成一维的。涨姿势了。
#include<bits/stdc++.h>
using namespace std;
int a[10][10];
int b[10][10];
int ha[10][10],lie[10][10];
typedef pair<int ,int> pii;
pii P[100];
int ok=0,s=0;
bool check(int x,int o)
{pii p=P[x];int m=(p.first-1)/3*3;int n=(p.second-1)/3*3;for(int i=m+1;i<=m+3;i++){for(int j=n+1;j<=n+3;j++){if(a[i][j]==o)return false;}}return true;
}
void dfs(int x)
{if(ok==1)return;if(x==s){ok=1;for(int i=1;i<10;i++){for(int j=1;j<10;j++)printf("%d ",a[i][j]);printf("\n");}return;}pii p=P[x];for(int i=1;i<=9;i++){if(!ha[p.first][i]&&!lie[p.second][i]&&check(x,i)){ha[p.first][i]=1;lie[p.second][i]=1;a[p.first][p.second]=i;dfs(x+1);ha[p.first][i]=0;lie[p.second][i]=0;a[p.first][p.second]=0;}}
}
int main()
{for(int i=1;i<=9;i++){for(int j=1;j<=9;j++){scanf("%d",&a[i][j]);if(a[i][j]!=0){ha[i][a[i][j]]=1;lie[j][a[i][j]]=1;}else{P[s].first=i;P[s++].second=j;}}}dfs(0);return 0;}
9*9的数独(dfs)相关推荐
- 数独(DFS优化练习)
描述 数独是一种运用纸.笔进行演算的逻辑游戏.玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个3*3宫内的数字均含1-9,不重复. 每一道合格的数独谜题都有且 ...
- 洛谷 P1784 数独 dfs
题目描述 数独是根据 9×9 盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个粗线宫内的数字均含 1 - 9 ,不重复.每一道合格的数独谜题都有且仅有唯一答案,推理方法也以此为 ...
- POJ-2676 Sudoku(简单数独-dfs深搜)
Sudoku Time Limit: 2000MS Memory Limit: 65536K 题目链接http://poj.org/problem?id=2676 Description Sudoku ...
- TOJ 3287 Sudoku 9*9数独 dfs
描述 Sudoku is a very simple task. A square table with 9 rows and 9 columns is divided to 9 smaller sq ...
- codevs1174 靶形数独 dfs+剪枝
题目描述 Description 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教, Z ...
- 数独 dfs 剪枝 位运算 保姆注释版 java
- 集合篇10.华为机试(涮题记录2)
华为机试 31.成绩排序(**not) 32. 矩阵乘法 33. 24点游戏算法(not) 34.配置文件恢复 35. 查找两个字符串a.b中的最长公共子串 36.MP3光标位置(not) 37.DN ...
- ACM比赛经验、刷题记录及模板库总结(更新中)
前言 本文所提及的部分题目代码,可以在我的Github上找到 第一部分 经验分享及感受 第二部分 刷题记录 一.基础算法&程序语言 //strlen()函数的复杂度是O(n)要小心 //截取字 ...
- HDU 1426 Sudoku Killer【DFS 数独】
自从2006年3月10日至11日的首届数独世界锦标赛以后,数独这项游戏越来越受到人们的喜爱和重视. 据说,在2008北京奥运会上,会将数独列为一个单独的项目进行比赛,冠军将有可能获得的一份巨大的奖品 ...
- 【位运算DFS/DLX】【HDU1426】【数独】
题意:标准的一道数独题 DFS做法: 将横纵九宫格里的数字用位运算状态压缩,且可以通过逻辑或来确定总共有哪些数字被选择了,很方便也很快,代码如下 #include <cstdio> #in ...
最新文章
- agpl限制了开源_不要限制您的开源项目的潜力
- [react] 说说你是怎么理解react的业务组件和技术组件的?
- javascript数组总结
- sun8134的Blog
- PYSQLITE用法初探
- WinHex V14.6 SR-2 注册码
- 3-20模拟赛【果冻之王】题解
- 为国内软件质量呐喊:《2021年国内质量调查报告》发布
- 超弦计算机,物理学四大神兽——拉普拉斯妖
- 编译原理 C-Minus 语法分析(Flex / Bison)
- it职业生涯_如何通过这些有用的网站提升您的自由职业生涯
- 温控驱动(五)dts参数解析、节点作用
- nginx防恶意刷新
- HTTP协议格式(请求格式、响应格式)
- Crossplane 和 Terraform 的区别
- 计算机类专业知识pdf,事业单位计算机专业知识整理(全)(20210324075052).pdf
- 如何通过互联网赚钱?
- 关于文案、营销、生活的15条思考!
- Verilog实现序列信号发生器
- 穷到低谷时的创业时间表