解决多个数独重叠联系
网上单个数独解答版本有很多,自己根据单个数独的解法推出了相互联系的多个数独解法,如图所示:
本文通过回溯法反复调用,且把五个小数独当作一个大树独,把整体联系起来了。且空格部分用-1填入,因为他不需要验证只要不是空格或者0就跳过,在检查是否符合填入标准的时候,有几个数独就分几个模块验证就好了!
public class Sudo2 {private int[][] matrix;public Sudo2(int[][]matrix){this.matrix=matrix;}public static void main(String[] args){int[][] sudoku={{0,2,3,0,0,7,5,0,0,-1,-1,-1,3,0,4,0,0,7,0,2,0},{0,0,7,0,0,0,1,0,0,-1,-1,-1,0,0,0,0,2,0,0,8,0},{0,0,4,0,0,3,8,0,0,-1,-1,-1,0,8,0,5,0,1,0,0,0},{3,0,0,0,6,8,0,9,0,-1,-1,-1,5,0,0,0,0,0,3,0,0},{1,0,0,0,7,2,6,0,5,-1,-1,-1,6,2,0,4,0,0,0,0,1},{0,0,0,5,0,0,0,0,0,-1,-1,-1,0,0,7,0,0,0,0,0,0},{0,0,0,8,0,0,0,0,0,0,1,6,0,0,0,0,0,6,0,0,5},{0,9,0,0,0,0,0,2,0,0,0,0,0,1,8,9,0,0,0,0,0},{0,4,6,0,0,0,0,8,0,2,0,3,4,0,0,8,1,3,7,0,0},{-1,-1,-1,-1,-1,-1,2,0,0,0,0,0,0,0,9,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,0,0,4,0,0,0,6,0,3,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,0,0,5,0,0,0,0,2,1,-1,-1,-1,-1,-1,-1},{0,8,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,7,0},{0,3,5,0,0,7,0,0,9,0,0,8,3,5,7,8,0,2,0,0,0},{0,0,4,0,2,5,8,0,0,0,5,0,0,0,0,0,0,7,0,1,3},{0,0,0,0,0,0,0,0,8,-1,-1,-1,0,0,0,0,2,0,0,9,0},{0,6,9,0,0,0,4,2,0,-1,-1,-1,5,0,0,9,0,0,0,0,0},{0,0,0,0,0,0,1,0,0,-1,-1,-1,6,0,0,0,8,3,0,0,0},{6,7,0,8,0,0,0,0,1,-1,-1,-1,8,0,2,4,0,0,7,0,0},{0,4,0,2,0,0,0,0,5,-1,-1,-1,0,0,0,0,9,0,2,0,0},{0,0,1,0,7,0,3,0,0,-1,-1,-1,0,4,3,0,0,5,0,0,0}};Sudo2 s=new Sudo2(sudoku);s.backTrace(0,0);}private void backTrace(int i,int j){if(i == 21 && j == 0){ //已经成功了,打印数组即可System.out.println("获取正确解");printArray();return;}if(j==21) {backTrace(++i,0);return;}if(matrix[i][j]==0){for (int k = 1; k <= 9; k++) {//循环赋值if(check(i,j,k)){matrix[i][j]=k;backTrace(i,j+1);//回溯法调用backTracematrix[i][j]=0;}}}else {backTrace(i,j+1);}}private boolean check(int row,int line,int number){//判断该⾏该列是否有重复数字if(row<9&&line<9){//第一个数独for(int i=0;i<9;i++){if(matrix[row][i]==number||matrix[i][line]==number){return false;}}}if(row>11&&line<9){//第二个数独for(int i=0;i<9;i++){if(matrix[row][i]==number||matrix[i+12][line]==number){return false;}}} if(line>11&&row<9){//第三个数独for(int i=0;i<9;i++){if(matrix[row][i+12]==number||matrix[i][line]==number){return false;}}} if(line>11&&row>11){//第四个数独for(int i=0;i<9;i++){if(matrix[row][i+12]==number||matrix[i+12][line]==number){return false;}}} if(line>5&&line<15&&row>5&&row<15){//中间的数独for(int i=0;i<9;i++){if(matrix[row][i+6]==number||matrix[i+6][line]==number){return false;}}}//判断该九宫格内是否有重复数字for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {if (matrix[row/3*3+i][line/3*3+j]==number)return false;}}return true;}//打印public void printArray(){for(int i=0;i<21;i++){for(int j=0;j<21;j++){System.out.print(matrix[i][j]+"");}System.out.println();}System.out.println();}}
解决多个数独重叠联系相关推荐
- 如何解决多个元素重叠问题?
如何解决多个元素重叠问题? 使用z-index属性可以设置元素的层叠顺序 (1)语法:z-index: auto | <integer> (2)默认值:auto (3)适用于:定位元素.即 ...
- 解决element-ui 的 Notification 重叠问题
今天在开发的时候,遇到一个问题: 场景: 有一个数组,我需要遍历这个数组,把这个数组里的每一项使用element-ui的Notification组件渲染在页面右下角. 这还不简单,arr.forEac ...
- html5 ul下的li重叠解决,firefox中div重叠覆盖之前ul的两种解决方法
第一种: 在模板中定义了一段代码,用于实现"推荐阅读"功能. 在实现过程中,包含如下代码: 复制代码代码如下: 推荐阅读 [e:loop={'selfinfo',10,2,0}] ...
- 【WEB】解决两个图像重叠的问题
这两天做小项目的时候遇见了这个问题,分享给跟我有同样问题的同学 如图所示 头像与对话框需要两个图片叠加才可以解决. .right-relative{position:relative; color:# ...
- 60行代码教你解决9*9数独游戏
今天我们来讲讲数独吧!失败率几乎为零,不会卡顿的方法,而且万能(指的是对于7 * 7,8 * 8 , 9 * 9, 10 * 10 等等) 先看效果! 一.思路 数独的规则 行和列不能有相同的数字,然 ...
- Unity解决同材质物体重叠产生Z-Fighting的问题
问题 在Unity中绘制多个可能部分或全部重叠的物体,这些物体可能是使用同一个材质,此时大概率会产生Z-Fighting 解决思路 Z-Fighting的原因是片段计算出的深度值太接近了,从而不能确定 ...
- 解决echarts中地图重叠问题
在使用Echarts开发项目时,经常会遇到地图组件的开发,困扰许久的地图重叠问题,无意间在echarts官方文档中找到了解决方案. 示例: 如上图,其代码如下: geo: {backgroundCol ...
- arcgis中解决点位符号化时重叠冲突
第一步:arcgis中加载所要分开的点数据图层(图层需定义好坐标系),然后在图层上右键选择Convert Symbology to Representation,转换成_Rep文件,如下图 第二步:A ...
- Cesium 解决两个billboard重叠问题
有时我们会在同一个坐标点叠加两个图片,但是Cesium中没有z-index的概念,因为cesium中是利用深度来区分先后的,所以这两个图片的层级关系我们控制不了,会出现一个图片被另一个遮挡的情况. 针 ...
最新文章
- 《COM组件开发实践》系列文章
- JavaScript学习笔记——JS中的变量复制、参数传递和作用域链
- Ipython中如何输入汉字
- 快速解决工作中遇到经典的括号匹配问题
- 2018 Kaggle 报告:在技术领域,女性从业者持续减少,00后开始展露头脚
- sql共享功能目录无法更改_大企业数据库服务首选!AliSQL这几大企业级功能你不可不知...
- mysql 学习笔记04 insert与update语句
- pytest配置文件pytest.ini
- 手机用久了很卡怎么办?
- export和export default的区别 1
- Caused by: java.lang.IllegalArgumentException: Result Maps collection does not contain value for...
- delphi memo 查找字符 下行插入_VBA实践+用编程代码为PDF文档插入书签
- 代理工具及使用技巧Proxy Hunter
- 切身体验的优秀时间管理法——番茄时间工作法!
- 苹果越狱后怎么还原_iOS 软件证书失效怎么办?越狱后你可以这么做
- Excel/WPS之粘贴可见内容
- C++模拟手机通信录管理系统
- 用VBA实现批量数据填充到word模板
- 小米路由器局域网设备ping不通
- signaturenonce php,php微信公众平台开发--接入微信API