问题描述

有一天,盾神接触到了风靡世界的小游戏——数独!!!盾神非常感兴趣,不惜翘课用了一天的时间把数独玩得出神入化!!!于是他要过来考考你。经过“盾神与简单数独”的磨练后,你会做9*9的了。

输入格式

输入为9*9的矩阵,如果第i行第j列为0,则该格子未填数;否则该格子已经有数。

输出格式

输出为1个9*9的矩阵,表示字典序最小的方案。如无解则输出NO。
  矩阵大小关系的定义:第一关键字为a[1][1],第二关键字为a[1][2],……第四关键字为a[1][4],第五关键字为a[2][1],以此类推。矩阵A小于矩阵B,当且仅当存在k,A和B的前k-1个关键字的值都相等,而A的第k个关键字的值小于B的第k个关键字的值。矩阵A等于矩阵B,当且仅当A小于B和B小于A都不成立。
  字典序升序的定义:在矩阵序列a中,对于任意的i<=j,有a[i]<=a[j]。

样例输入

1 2 3 4 5 6 7 8 9
2 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 0
7 0 0 0 0 0 0 0 0
8 0 0 0 0 0 0 0 0
9 0 0 0 0 0 0 0 0

样例输出

NO

样例输入

1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0

样例输出

1 2 3 4 5 6 7 8 9
4 5 6 7 8 9 1 2 3
7 8 9 1 2 3 4 5 6
2 1 4 3 6 5 8 9 7
3 6 5 8 9 7 2 1 4
8 9 7 2 1 4 3 6 5
5 3 1 6 4 2 9 7 8
6 4 2 9 7 8 5 3 1
9 7 8 5 3 1 6 4 2
数据规模和约定
矩阵中所有数的值为0到9。

题解

数独定义:

dfs+回溯,和方块填数非常像,但是我漏了一个数独非常重要的条件,也就是每一个粗线宫(3*3)内的数字也是只含1-9不能重复(连数独都忘了怎么玩了)。

代码

#include<iostream>
#include<vector>
using namespace std;
vector<vector<int> > matrix(9, vector<int>(9));//数独矩阵
vector<vector<bool> > rowFlag(9, vector<bool>(10, 0));//行标记
vector<vector<bool> > colFlag(9, vector<bool>(10, 0));//列标记
vector<vector<bool> > groupFlag(9, vector<bool>(10, 0));//小组标记int dfs(int num) {if (num == 81) {//递归边界for (int i = 0; i < 9; ++i) {for (int j = 0; j < 9; ++j) {cout << matrix[i][j] << " ";}cout << endl;}return 1;}//计算row,colint x = num / 9, y = num % 9,groupIndex;//将坐标转换成对应的小组序号groupIndex = (x / 3) * 3 + (y / 3);//dfs+回溯if (matrix[x][y] == 0) {for (int i = 1; i <= 9; ++i) {if (rowFlag[x][i] == 0 && colFlag[y][i] == 0 && groupFlag[groupIndex][i] == 0) {matrix[x][y] = i;rowFlag[x][i] = 1;colFlag[y][i] = 1;groupFlag[groupIndex][i] = 1;if (dfs(num + 1))return 1;groupFlag[groupIndex][i] = 0;matrix[x][y] = 0;rowFlag[x][i] = 0;colFlag[y][i] = 0;}}}else {if (dfs(num + 1))return 1;}return 0;
}int main() {for (int i = 0; i < 9; ++i) {for (int j = 0; j < 9; ++j) {cin >> matrix[i][j];if (matrix[i][j] != 0) {int groupIndex = (i / 3) * 3 + (j / 3);//如果在输入的时候发现已经不满足条件,直接输出NO并结束if (rowFlag[i][matrix[i][j]] || colFlag[j][matrix[i][j]] || groupFlag[groupIndex][matrix[i][j]] ) {cout << "NO";return 0;}rowFlag[i][matrix[i][j]] = 1;colFlag[j][matrix[i][j]] = 1;groupFlag[groupIndex][matrix[i][j]] = 1;}}}if (dfs(0) == 0)cout << "NO";//system("pause");return 0;
}

评测结果:

【蓝桥杯试题】盾神与困难数独相关推荐

  1. 蓝桥杯试题盾神与积木游戏之论减少时间复杂度的重要性

    问题描述 最近的m天盾神都去幼儿园陪小朋友们玩去了~ 每个小朋友都拿到了一些积木,他们各自需要不同数量的积木来拼一些他们想要的东西.但是有的小朋友拿得多,有的小朋友拿得少,有些小朋友需要拿到其他小朋友 ...

  2. 蓝桥杯 ADV-193 盾神与条状项链 (试题解析)

    试题 算法提高 盾神与条状项链 提交此题   评测记录 资源限制 时间限制:1.0s   内存限制:256.0MB 问题描述 有一天,盾神捡到了好多好多五颜六色的珠子!他心想这些珠子这么漂亮,可以做成 ...

  3. 蓝桥杯研究生c语言试题答案,蓝桥杯试题_蓝桥杯 你有蓝桥杯历年的试题吗最好有参考答案啊 高职高专组C语言的 有的话麻烦你发给我 万分感谢_淘题吧...

    ❶ 蓝桥杯 你有蓝桥杯历年的试题吗最好有参考答案啊. 高职高专组C语言的 有的话麻烦你发给我 万分感谢 我有真题.但是老师没给答案 ❷ 为什么蓝桥杯试题集评测老是错 楼上的网友说的很简单,实际上因为每 ...

  4. Python 蓝桥杯试题 基础练习 特殊回文数

    Python 蓝桥杯试题 基础练习 特殊回文数 问题描述: 123321是一个非常特殊的数,它从左边读和从右边读是一样的. 输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于 ...

  5. 蓝桥杯试题 数列排序

    蓝桥杯试题 数列排序 问题描述 给定一个长度为n的数列,将这个数列按从小到大的顺序排列.1<=n<=200 输入格式 第一行为一个整数n. 第二行包含n个整数,为待排序的数,每个整数的绝对 ...

  6. Python 蓝桥杯试题 基础练习 数列排序

    Python 蓝桥杯试题 基础练习 数列排序 题目描述: 问题描述 给定一个长度为n的数列,将这个数列按从小到大的顺序排列.1<=n<=200 输入格式 第一行为一个整数n. 第二行包含n ...

  7. 蓝桥杯试题 基础练习 数列特征python

    蓝桥杯试题 基础练习 数列特征python 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给出n个数,找出这n个数的最大值,最小值,和. 输入格式 第一行为整数n,表示数的个数. ...

  8. 蓝桥杯 试题 算法训练 无聊的逗 C++ 详解

    题目: 逗志芃在干了很多事情后终于闲下来了,然后就陷入了深深的无聊中.不过他想到了一个游戏来使他更无聊.他拿出n个木棍,然后选出其中一些粘成一根长的,然后再选一些粘成另一个长的,他想知道在两根一样长的 ...

  9. 蓝桥杯 试题 算法训练 无聊的逗 C++ 详解 - 未完善

    题目: 逗志芃在干了很多事情后终于闲下来了,然后就陷入了深深的无聊中.不过他想到了一个游戏来使他更无聊.他拿出n个木棍,然后选出其中一些粘成一根长的,然后再选一些粘成另一个长的,他想知道在两根一样长的 ...

  10. 蓝桥杯 试题 算法训练 筛选号码 Java

    蓝桥杯 试题 算法训练 筛选号码Java 算法训练 筛选号码 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 有n个人围成一圈,顺序排号(编号为1到n).从第1个人开始报数(从1到3 ...

最新文章

  1. Quartz.Net—MisFire
  2. php 一次性替换多个关键词
  3. PHP语法(3.)环境变量
  4. 计算机专业毕业论文指导记录详细,毕业论文指导记录怎么写 了解一下
  5. (转)如何使用CodeSmith批量生成代码
  6. php 与shell,[转]PHP与Shell交互
  7. python模式字符串_使用python进行字符串模式匹配
  8. IBM SVC (2145-CF8) node脱机故障恢复分享
  9. http://www.jb51.net/article/51934.htm
  10. matlab去除图片水印_一种基于MATLAB去图片水印方法
  11. 突然看到微信还有这种赞赏码
  12. 国内顶尖网页游戏制作人和主策划名单
  13. VMware Workstation 与 Device/Credential Guard 不兼容。在禁用 Device/Credential Guard
  14. 【商业画布】魏朱画布
  15. 三星Q90 全景声回音壁 参数发布
  16. 基于STM32的esp8266WIFI自动校时+语音报时可调时钟(附源代码)
  17. 软件学院集训队第一次选拔赛题解
  18. graphpad prism图标设置_GraphPad prism卡方检验操作详细步骤
  19. VerilogHDL(1)数字集成电路设计方法概述
  20. backtrader程序介绍-策略回测用法

热门文章

  1. 动态规划练习(1)--[编程题] 风口的猪-中国牛市
  2. 动手实践 用 easyboot 制作N合一光盘
  3. 华东理工c语言题库,华东理工大学c语言.doc
  4. 利用无线串口进行单片机通信(基于MK60)
  5. 完全教程 Aircrack-ng破解WEP、WPA-PSK加密利器[zz]
  6. Alibaba(实习准备)—SOFARPC学习总结
  7. 计算机性能和拷机软件
  8. 《人月神话》(The Mythical Man-Month)4概念一致性:专制、民主和系统设计(System Design)...
  9. flashfxp搜索服务器文件夹,FlashFXP 命令行参数
  10. 仿支付宝股票 猜涨跌View