网上单个数独解答版本有很多,自己根据单个数独的解法推出了相互联系的多个数独解法,如图所示:

本文通过回溯法反复调用,且把五个小数独当作一个大树独,把整体联系起来了。且空格部分用-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();}}

解决多个数独重叠联系相关推荐

  1. 如何解决多个元素重叠问题?

    如何解决多个元素重叠问题? 使用z-index属性可以设置元素的层叠顺序 (1)语法:z-index: auto | <integer> (2)默认值:auto (3)适用于:定位元素.即 ...

  2. 解决element-ui 的 Notification 重叠问题

    今天在开发的时候,遇到一个问题: 场景: 有一个数组,我需要遍历这个数组,把这个数组里的每一项使用element-ui的Notification组件渲染在页面右下角. 这还不简单,arr.forEac ...

  3. html5 ul下的li重叠解决,firefox中div重叠覆盖之前ul的两种解决方法

    第一种: 在模板中定义了一段代码,用于实现"推荐阅读"功能. 在实现过程中,包含如下代码: 复制代码代码如下: 推荐阅读 [e:loop={'selfinfo',10,2,0}] ...

  4. 【WEB】解决两个图像重叠的问题

    这两天做小项目的时候遇见了这个问题,分享给跟我有同样问题的同学 如图所示 头像与对话框需要两个图片叠加才可以解决. .right-relative{position:relative; color:# ...

  5. 60行代码教你解决9*9数独游戏

    今天我们来讲讲数独吧!失败率几乎为零,不会卡顿的方法,而且万能(指的是对于7 * 7,8 * 8 , 9 * 9, 10 * 10 等等) 先看效果! 一.思路 数独的规则 行和列不能有相同的数字,然 ...

  6. Unity解决同材质物体重叠产生Z-Fighting的问题

    问题 在Unity中绘制多个可能部分或全部重叠的物体,这些物体可能是使用同一个材质,此时大概率会产生Z-Fighting 解决思路 Z-Fighting的原因是片段计算出的深度值太接近了,从而不能确定 ...

  7. 解决echarts中地图重叠问题

    在使用Echarts开发项目时,经常会遇到地图组件的开发,困扰许久的地图重叠问题,无意间在echarts官方文档中找到了解决方案. 示例: 如上图,其代码如下: geo: {backgroundCol ...

  8. arcgis中解决点位符号化时重叠冲突

    第一步:arcgis中加载所要分开的点数据图层(图层需定义好坐标系),然后在图层上右键选择Convert Symbology to Representation,转换成_Rep文件,如下图 第二步:A ...

  9. Cesium 解决两个billboard重叠问题

    有时我们会在同一个坐标点叠加两个图片,但是Cesium中没有z-index的概念,因为cesium中是利用深度来区分先后的,所以这两个图片的层级关系我们控制不了,会出现一个图片被另一个遮挡的情况. 针 ...

最新文章

  1. 《COM组件开发实践》系列文章
  2. JavaScript学习笔记——JS中的变量复制、参数传递和作用域链
  3. Ipython中如何输入汉字
  4. 快速解决工作中遇到经典的括号匹配问题
  5. 2018 Kaggle 报告:在技术领域,女性从业者持续减少,00后开始展露头脚
  6. sql共享功能目录无法更改_大企业数据库服务首选!AliSQL这几大企业级功能你不可不知...
  7. mysql 学习笔记04 insert与update语句
  8. pytest配置文件pytest.ini
  9. 手机用久了很卡怎么办?
  10. export和export default的区别 1
  11. Caused by: java.lang.IllegalArgumentException: Result Maps collection does not contain value for...
  12. delphi memo 查找字符 下行插入_VBA实践+用编程代码为PDF文档插入书签
  13. 代理工具及使用技巧Proxy Hunter
  14. 切身体验的优秀时间管理法——番茄时间工作法!
  15. 苹果越狱后怎么还原_iOS 软件证书失效怎么办?越狱后你可以这么做
  16. Excel/WPS之粘贴可见内容
  17. C++模拟手机通信录管理系统
  18. 用VBA实现批量数据填充到word模板
  19. 小米路由器局域网设备ping不通
  20. signaturenonce php,php微信公众平台开发--接入微信API

热门文章

  1. uchar 和 uchar3的疑惑
  2. 非科班出身这么理解货币乘数
  3. vue中的@keyup事件
  4. 极简烟雨图床正式版源码V2.1.3/高速外链图床
  5. ORACLE11g R2 for Linux 下载地址
  6. 在线免费完整PDF转PPT格式
  7. 多余文字隐藏用省略号代替
  8. 网站压力测试工具was
  9. 基于Python的OCR图像识别
  10. C语言编程>第二十六周 ① 函数fun的功能是:将形参b所指数组中的前半部分元素的值和后半部分元素的值对换。形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动。