2018蓝桥模拟赛(一) 数独(dfs)
题目描述
蒜头君今天突然开始还念童年了,想回忆回忆童年。他记得自己小时候,有一个很火的游戏叫做数独。便开始来了一局紧张而又刺激的高阶数独。蒜头君做完发现没有正解,不知道对不对? 不知道聪明的你能否给出一个标准答案?标准数独是由一个给与了提示数字的 9 \times 99×9 网格组成,我们只需将其空格填上数字,使得每一行,每一列以及每一个 3 \times 33×3 宫都没有重复的数字出现。
把上面的 * 替换成 1−9 就可以了
提醒:两个数字之间要有一个空格,其他地方不要输出多余的符号。
本题答案不唯一,符合要求的答案均正确
思路:准备3中类型的bool型数组,row,col,mat分别表示行,列,3x3数独
row[i][x]表示的是第i行是否有x这个元素
col[i][x]表示的是第i列是否有x这个元素
mat[i/3][j/3][x]表示的是第i/3个3x3矩阵中是否有x这个元素
#include <iostream>
#include <cstdio>
#include <cstring>
#define M 11
using namespace std;
struct point
{int x, y;
} p[100];
int flag; //记录一组数据
bool row[M][M];
bool col[M][M];
bool mat[3][3][M];
int np = 0;
int Map[M][M]= {{0,2,6,0,0,0,0,0,0},
{0,0,0,5,0,2,0,0,4},
{0,0,0,1,0,0,0,0,7},
{0,3,0,0,2,0,1,8,0},
{0,0,0,3,0,9,0,0,0},
{0,5,4,0,1,0,0,7,0},
{5,0,0,0,0,1,0,0,0},
{6,0,0,9,0,7,0,0,0},
{0,0,0,0,0,0,7,5,0}};
void dfs(int n)
{if(flag)return ;if(n==-1&&!flag){ //所有的点都赋值后,输出for(int i=0;i<9;i++){for(int j=0;j<9;j++)printf("%d ",Map[i][j]);printf("\n");}flag=1;}for(int i=1;i<=9&&!flag;i++){ //依次遍历找到合适的解int x=p[n].x;int y=p[n].y;if(!row[x][i]&&!col[y][i]&&!mat[x/3][y/3][i]){row[x][i]=col[y][i]=mat[x/3][y/3][i]=true; //选iMap[x][y]=i;dfs(n-1); //继续深搜row[x][i]=col[y][i]=mat[x/3][y/3][i]=false;//不选iMap[x][y]=0;}}
}
int main()
{flag = 0;memset(row,false,sizeof(row));memset(col,false,sizeof(col));memset(mat,false,sizeof(mat));for(int i=0;i<9;i++){for(int j=0;j<9;j++){int num = Map[i][j];if(num){row[i][num] = col[j][num] = mat[i/3][j/3][num] = true;}else{p[np].x = i;p[np++].y = j;}}}dfs(np-1);return 0;
}
2018蓝桥模拟赛(一) 数独(dfs)相关推荐
- 2018蓝桥模拟赛·天上的星星 暴力|二维树状数组
在一个星光摧残的夜晚,蒜头君一颗一颗的数这天上的星星. 蒜头君给在天上巧妙的画了一个直角坐标系,让所有的星星都分布在第一象.天上有 nn 颗星星,他能知道每一颗星星的坐标和亮度. 现在,蒜头君问自己 ...
- 2018蓝桥模拟赛 天上的星星
在一个星光摧残的夜晚,蒜头君一颗一颗的数这天上的星星. 蒜头君给在天上巧妙的画了一个直角坐标系,让所有的星星都分布在第一象.天上有 nn 颗星星,他能知道每一颗星星的坐标和亮度. 现在,蒜头君问自己 ...
- java contions_十一届蓝桥模拟赛 元辅音字母 JAVA
问题描述 给定一个单词,请计算这个单词中有多少个元音字母,多少个辅音字母. 元音字母包括 a, e, i, o, u,共五个,其他均为辅音字母. 输入格式 输入一行,包含一个单词,单词中只包含小写英文 ...
- 十一届蓝桥模拟赛 元辅音字母 JAVA
问题描述 给定一个单词,请计算这个单词中有多少个元音字母,多少个辅音字母. 元音字母包括 a, e, i, o, u,共五个,其他均为辅音字母. 输入格式 输入一行,包含一个单词,单词中只包含小写英文 ...
- 2018蓝桥杯模拟赛·青出于蓝而胜于蓝 DFS序+树状数组
武当派一共有 nnn 人,门派内 nnn 人按照武功高低进行排名,武功最高的人排名第 111,次高的人排名第 222,... 武功最低的人排名第 nnn.现在我们用武功的排名来给每个人标号,除了祖师爷 ...
- YBTOJ 入门到进阶模拟赛 Day2 数独游戏
数独游戏 link 判断重复 数独要求每一行.每一列.每一个3×3方阵内的数字,不重复. 行和列重复判断是相当简单的. 我们可以定义两个bool型二维数组, 当此行(或列)填充数字时, 我们可以直接把 ...
- 【蓝桥杯回力篇】蓝桥模拟赛【摆烂day1】
前言 最近在忙的写东西,蓝桥已经是摆烂的状态了. 终归是交了钱的,还是得在最后十天练习练习. 1.A的个数 以下是一个 25 行 25 列的字母矩阵,全部由字母 A 和 B 组成. AAAAAAABA ...
- 十一届蓝桥模拟赛 元素之间最大的元素距离 JAVA
问题描述 在数列 a_1, a_2, -, a_n中,定义两个元素 a_i 和 a_j 的距离为 |i-j|+|a_i-a_j|,即元素下标的距离加上元素值的差的绝对值,其中 |x| 表示 x 的绝对 ...
- 【蓝桥杯摆烂篇】蓝桥模拟赛【摆烂day3】
最新文章
- 【PAT乙级】1090 危险品装箱 (25 分)
- Python中的partial便函数的理解
- 贷款审批时,会重点看征信报告哪些内容?
- 全国计算机等级考试题库二级C操作题100套(第41套)
- Linux关闭防火墙详述
- (49)FPGA线性单驱动(wire型)
- 品《阿里巴巴大数据实践-大数据之路》一书(上)
- STM32工作笔记0068---SPI同步通信Flash读写实验
- HDU 1102 Constructing Roads
- nupkg 本地安装_关于Visual Studio:如何在本地安装NuGet包.nupkg文件?
- python列表如何求增长率_python如何计算环比增长率
- chrome 插件--B站自动发弹幕
- 邱天计算机,华北电力大学控制与计算机工程学院导师教师师资介绍简介-邱天...
- linux信号:SIGINT、SIGKILL、SIGSTOP、SIGCONT
- Oracle 查询库文件信息
- RK3588参数 rk3288处理器属于什么档次
- PIC18F2455/2550/4455/4550之通用串行总线USB
- Python基础教程之数据类型
- 剖析Docker镜像原理
- 用mysql设计一个KTV点歌系统_java swing mysql实现的ktv点歌系统项目源码附带视频教程...
热门文章
- (C#)xml的简单理解创建和读取
- WPF中ListBox的样式设置
- 开发落网电台windows phone 8应用的计划(10)-----收尾
- 牛客网NOIP赛前集训营 第6场 T1 最长路
- 经典算法题每日演练——第二十四题 梳排序
- 【Java从0到架构师】Zookeeper - 系统高可用、分布式的基本概念、Zookeeper 应用场景
- 【jQuery笔记Part1】04-webstorm定义活动模板
- Linux系统管理(11)——linux下jdk的安装及环境变量配置
- Linux 各种压缩类型文件 解压命令 整理 tar.bz2 tar.gz tgz等等
- 期货市场技术分析01_理论基础