题目描述

蒜头君今天突然开始还念童年了,想回忆回忆童年。他记得自己小时候,有一个很火的游戏叫做数独。便开始来了一局紧张而又刺激的高阶数独。蒜头君做完发现没有正解,不知道对不对? 不知道聪明的你能否给出一个标准答案?标准数独是由一个给与了提示数字的 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)相关推荐

  1. 2018蓝桥模拟赛·天上的星星 暴力|二维树状数组

    在一个星光摧残的夜晚,蒜头君一颗一颗的数这天上的星星. 蒜头君给在天上巧妙的画了一个直角坐标系,让所有的星星都分布在第一象.天上有 nn 颗星星,他能知道每一颗星星的坐标和亮度. 现在,蒜头君问自己  ...

  2. 2018蓝桥模拟赛 天上的星星

    在一个星光摧残的夜晚,蒜头君一颗一颗的数这天上的星星. 蒜头君给在天上巧妙的画了一个直角坐标系,让所有的星星都分布在第一象.天上有 nn 颗星星,他能知道每一颗星星的坐标和亮度. 现在,蒜头君问自己  ...

  3. java contions_十一届蓝桥模拟赛 元辅音字母 JAVA

    问题描述 给定一个单词,请计算这个单词中有多少个元音字母,多少个辅音字母. 元音字母包括 a, e, i, o, u,共五个,其他均为辅音字母. 输入格式 输入一行,包含一个单词,单词中只包含小写英文 ...

  4. 十一届蓝桥模拟赛 元辅音字母 JAVA

    问题描述 给定一个单词,请计算这个单词中有多少个元音字母,多少个辅音字母. 元音字母包括 a, e, i, o, u,共五个,其他均为辅音字母. 输入格式 输入一行,包含一个单词,单词中只包含小写英文 ...

  5. 2018蓝桥杯模拟赛·青出于蓝而胜于蓝 DFS序+树状数组

    武当派一共有 nnn 人,门派内 nnn 人按照武功高低进行排名,武功最高的人排名第 111,次高的人排名第 222,... 武功最低的人排名第 nnn.现在我们用武功的排名来给每个人标号,除了祖师爷 ...

  6. YBTOJ 入门到进阶模拟赛 Day2 数独游戏

    数独游戏 link 判断重复 数独要求每一行.每一列.每一个3×3方阵内的数字,不重复. 行和列重复判断是相当简单的. 我们可以定义两个bool型二维数组, 当此行(或列)填充数字时, 我们可以直接把 ...

  7. 【蓝桥杯回力篇】蓝桥模拟赛【摆烂day1】

    前言 最近在忙的写东西,蓝桥已经是摆烂的状态了. 终归是交了钱的,还是得在最后十天练习练习. 1.A的个数 以下是一个 25 行 25 列的字母矩阵,全部由字母 A 和 B 组成. AAAAAAABA ...

  8. 十一届蓝桥模拟赛 元素之间最大的元素距离 JAVA

    问题描述 在数列 a_1, a_2, -, a_n中,定义两个元素 a_i 和 a_j 的距离为 |i-j|+|a_i-a_j|,即元素下标的距离加上元素值的差的绝对值,其中 |x| 表示 x 的绝对 ...

  9. 【蓝桥杯摆烂篇】蓝桥模拟赛【摆烂day3】

最新文章

  1. 【PAT乙级】1090 危险品装箱 (25 分)
  2. Python中的partial便函数的理解
  3. 贷款审批时,会重点看征信报告哪些内容?
  4. 全国计算机等级考试题库二级C操作题100套(第41套)
  5. Linux关闭防火墙详述
  6. (49)FPGA线性单驱动(wire型)
  7. 品《阿里巴巴大数据实践-大数据之路》一书(上)
  8. STM32工作笔记0068---SPI同步通信Flash读写实验
  9. HDU 1102 Constructing Roads
  10. nupkg 本地安装_关于Visual Studio:如何在本地安装NuGet包.nupkg文件?
  11. python列表如何求增长率_python如何计算环比增长率
  12. chrome 插件--B站自动发弹幕
  13. 邱天计算机,华北电力大学控制与计算机工程学院导师教师师资介绍简介-邱天...
  14. linux信号:SIGINT、SIGKILL、SIGSTOP、SIGCONT
  15. Oracle 查询库文件信息
  16. RK3588参数 rk3288处理器属于什么档次
  17. PIC18F2455/2550/4455/4550之通用串行总线USB
  18. Python基础教程之数据类型
  19. 剖析Docker镜像原理
  20. 用mysql设计一个KTV点歌系统_java swing mysql实现的ktv点歌系统项目源码附带视频教程...

热门文章

  1. (C#)xml的简单理解创建和读取
  2. WPF中ListBox的样式设置
  3. 开发落网电台windows phone 8应用的计划(10)-----收尾
  4. 牛客网NOIP赛前集训营 第6场 T1 最长路
  5. 经典算法题每日演练——第二十四题 梳排序
  6. 【Java从0到架构师】Zookeeper - 系统高可用、分布式的基本概念、Zookeeper 应用场景
  7. 【jQuery笔记Part1】04-webstorm定义活动模板
  8. Linux系统管理(11)——linux下jdk的安装及环境变量配置
  9. Linux 各种压缩类型文件 解压命令 整理 tar.bz2 tar.gz tgz等等
  10. 期货市场技术分析01_理论基础