【蓝桥杯 数独填数 DFS】
蓝桥杯 数独填数 DFS
- 题目描述
- 代码
题目描述
你一定听说过“数独”游戏。如【图1.png】,玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个同色九宫内的数字均含1-9,不重复。数独的答案都是唯一的,所以,多个解也称为无解。
格式要求,输入9行,每行9个数字,0代表未知,其它数字为已知。
输出9行,每行9个数字表示数独的解。
例如:
输入(即图中题目):
005300000
800000020
070010500
400005300
010070006
003200080
060500009
004000030
000009700
程序应该输出:
145327698
839654127
672918543
496185372
218473956
753296481
367542819
984761235
521839764
再例如,输入:
800000000
003600000
070090200
050007000
000045700
000100030
001000068
008500010
090000400
程序应该输出:
812753649
943682175
675491283
154237896
369845721
287169534
521974368
438526917
796318452
资源约定:
峰值内存消耗 < 256M
CPU消耗 < 2000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。
提交时,注意选择所期望的编译器类型。
代码
public static void main(String[] args) {Scanner kb=new Scanner(System.in);char [][]table=new char[9][9];for (int i = 0; i <9; i++) {table[i]=kb.nextLine().toCharArray();}dfs(table,0,0);}/*** 深度优先搜索* @param table* @param x* @param y*/private static void dfs(char[][] table, int x, int y) {//当某一次dfs递归到终点table[8][8],x=9输出if (x==9) {for (char[] x1:table) {System.out.println(x1);}System.exit(0);}if (table[x][y]=='0') {//不知道填什么 1-9遍历填入当前位置for (int i = 1; i <10; i++) {boolean flag=check(table,x,y,i);//判断行列是否有重复确定区间if (flag) {table[x][y]=(char)(i+'0');//(y+1)/9 假设y到8了那么 就要到系一行dfs(table, x+(y+1)/9, (y+1)%9);table[x][y]='0';//回溯}}}else {//不是0 搜索下一位置dfs(table, x+(y+1)/9, (y+1)%9);}}/*** 判断是否行列有重复的数字* @param table* @param x* @param y* @param i* @return*/private static boolean check(char[][] table, int x, int y, int value) {boolean flag=true;char c=(char)(value+'0');for (int i = 0; i <9; i++) {//判断行if (table[x][i]==c) {return false;}//判断列if (table[i][y]==c) {return false;}}//判断小九宫格//这里的(x/3)*3--(x/3+1)*3 这里比较难理解 //确定范围for (int i = (x/3)*3; i <(x/3+1)*3; i++) {for (int j = (y/3)*3; j < (y/3+1)*3; j++) {if (table[i][j]==c) {flag=false;}}}return flag;}
【蓝桥杯 数独填数 DFS】相关推荐
- 求圈地的方块数java,java实现第三届蓝桥杯方块填数
方块填数 "数独"是当下炙手可热的智力游戏.一般认为它的起源是"拉丁方块",是大数学家欧拉于1783年发明的. 如图[1.jpg]所示:6x6的小格被分为6个部 ...
- java实现第七届蓝桥杯七星填数
七星填数 如图[图1.png]所示. 在七角星的14个节点上填入1~14 的数字,不重复,不遗漏. 要求每条直线上的四个数字之和必须相等. 图中已经给出了3个数字. 请计算其它位置要填充的数字,答案唯 ...
- java实现第七届蓝桥杯方格填数
方格填数 题目描述 如下的10个格子+--+--+--+| | | | +--+--+--+--+ | | | | | +--+--+--+--+ | | | | +--+--+--+(如果显示有问题 ...
- 蓝桥杯 方格填数(全排列+图形补齐)
方格填数 如下的10个格子 填入0~9的数字,同一数字不能重复填.要求:连续的两个数字不能相邻. (左右.上下.对角都算相邻) 一共有多少种可能的填数方案? 请填写表示方案数目的整数. 注意:你提交的 ...
- Java算法学习:蓝桥杯——地宫寻宝(DFS+动态规划—记忆型递归)
Java算法学习:蓝桥杯--地宫寻宝(DFS✖记忆型递归) 题目: 标题:地宫取宝X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签.地宫的入口在左上角,出 ...
- 蓝桥杯-K好数(详解易懂)java
蓝桥杯-K好数java 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4,L = 2的时候,所有K好数 ...
- java蓝桥杯练习 幸运数
java蓝桥杯练习 幸运数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 幸运数是波兰数学家乌拉姆命名的.它采用与生成素数类似的"筛法"生成. 首先从1开始写出 ...
- 蓝桥杯基础练习-数的读法
蓝桥杯基础练习-数的读法 问题描述 Tom教授正在给研究生讲授一门关于基因的课程,有一件事情让他颇为头疼:一条染色体上有成千上万个碱基对,它们从0开始编号,到几百万,几千万,甚至上亿. 比如说,在对学 ...
- [蓝桥杯2019初赛]迷宫-DFS、BFS两种方法
迷宫问题的最短路,加最小字典序 迷宫文件maze.txt传送门 作者写的2019年B组蓝桥杯解集 . . . DFS的版本 #include<iostream> #include<c ...
最新文章
- 主席树 | 莫队 ---- Codeforces Round #716 (Div. 2) D. Cut and Stick [主席树or莫队优化] 区间众数问题(静态)
- 关于IAR的一些总结 -- ARM调试和Flash调试的区别
- 在树莓派上使用 PowerShell 调用 Azure 上的 .NET Core API 获取疫情数据
- Python--协程(gevent模块)
- 多任务学习模型之ESMM介绍与实现
- Pytorch torch.nonzero()的简单用法
- 挖空的煤矿能否储存石油
- 求Kinetics400,AVA,prcv2018,Moments in time challenge2018,youtube8M,ActivityNet数据集,原始视频
- oracle将汉字转为全拼或返回拼音首字母sql
- Opencv学习——LSD直线检测
- Ansible之Inventory定义
- 【Pygame小游戏】Python版有迷宫嘛?原来藏在个地方呀~
- 中国农科院基因组所汪鸿儒课题组诚邀加入
- C++程序闪退原因定位
- 用vmware安装雨林木风虚拟机系统的坑
- redis设计与实现-数据库篇
- 在MySQL中创建Oracle中的dept、emp、bonus、salgrade表
- Android开发者选项——GPU呈现模式分析
- 黑盒测试用例的设计方法有哪些
- 来一起学习一下vue3.0 初体验---comeon