package sodoku.puzzler;

/**

* 求解Sodoku Puzzler的工具类

* @author Eastsun

*/

public class Solver{

protected static final int SIZE = Puzzler.SIZE;

//避免生成该类实例

protected Solver(){

}

public static boolean solve(Puzzler p){

int[][] num =new int[SIZE][SIZE];

boolean[][] rFlags =new boolean[SIZE][SIZE+1],

cFlags =new boolean[SIZE][SIZE+1],

zFlags =new boolean[SIZE][SIZE+1];

for(int r=0;r

for(int c=0;c

if(p.isFixed(r,c)){

int t =p.getNumber(r,c);

num[r][c] =t;

rFlags[r][t] =true;

cFlags[c][t] =true;

zFlags[r/3*3+c/3][t] =true;

}

int r =0,c =0;

outLoop:

for(;;){//

if(p.isFixed(r,c)){

c ++;

if(c>=SIZE){

c =0;

r ++;

if(r>=SIZE) break outLoop;

}

continue outLoop;

} //if(p.isFixed())

int t =SIZE;

for(c++;;){//

if(t>=SIZE){

c --;

if(c<0){

c =SIZE -1;

r --;

if(r<0) break outLoop;

}

if(p.isFixed(r,c)) continue;

t =num[r][c];

if(t!=0){

rFlags[r][t] =false;

cFlags[c][t] =false;

zFlags[r/3*3+c/3][t] =false;

num[r][c] =0;

}

} else{

t ++;

if(!(rFlags[r][t]||

cFlags[c][t]||

zFlags[r/3*3+c/3][t])

) break;

}

}//for(c++;;);

num[r][c] =t;

rFlags[r][t] =true;

cFlags[c][t] =true;

zFlags[r/3*3+c/3][t] =true;

c ++;

if(c>=SIZE){

c =0;

r ++;

if(r>=SIZE) break outLoop;

}

}

if(r<0) return false;

for(r=0;r

for(c=0;c

if(!p.isFixed(r,c)) p.setNumber(r,c,num[r][c]);

return true;

}

//test

public static void main(String[] args){

Puzzler p =new Puzzler();

int[][] data ={{0,0,0, 0,0,4, 0,7,6},

{8,0,1, 0,0,0, 0,3,0},

{0,4,6, 0,0,3, 0,0,0},

{0,0,0, 0,2,0, 7,0,1},

{1,0,0, 7,0,6, 0,0,5},

{5,0,7, 0,3,0, 0,0,0},

{0,0,0, 9,0,0, 8,1,0},

{0,5,0, 0,0,0, 2,0,4},

{9,1,0, 8,0,0, 0,0,0}

};

p.setPuzzler(data);

System.out.println(solve(p));

for(int r =0;r

for(int c=0;c

System.out.println();

}

}

}

java数独最快解_[分享]数独的JAVA解法相关推荐

  1. java毕设用的框架_分享四个Java低代码快速开发平台贼好用, 私活毕设神器

    一.OPSLI 快速开发平台 OPSLI 快速开发平台基于springboot.vue.element-ui .vue-admin-beautiful,项目采用前后端分离架构,热插拔式业务模块与插件扩 ...

  2. java比go难学_为什么Go比Java快这么多?看完这个例子就懂

    一,前言 本次小测试并不是试图说明Go是java的替代,Go lang和Java本就不是实现相同类型任务的语言 :Java是企业开发语言,而Go是系统编程语言.为什么Go比Java快这么多?看完这个例 ...

  3. java标签用法详解_介绍一个javaWeb自定义标签的用法详解

    这篇文章主要介绍了javaWeb自定义标签用法,结合实例形式分析了javaweb自定义标签的功能.定义方法及执行原理,需要的朋友可以参考下 本文实例讲述了javaWeb自定义标签用法.分享给大家供大家 ...

  4. java io流详解_一文带你看懂JAVA IO流,史上最全面的IO教学啦

    一.IO流是什么 惯例引用百科的回答流是一种抽象概念,它代表了数据的无结构化传递.按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列.从流中取得数据的操作称为提取操作,而向流中添加数据的操作 ...

  5. java为何重复调用方法_通过反射调用Java中的getter:重复调用它的最快方法是什么(在性能和可伸缩性方面)?...

    小编典典 您可以使用MethodHandle.其Javadoc写道: 使用Lookup API中的工厂方法,可以将Core Reflection API对象表示的任何类成员转换为行为等效的方法句柄.例 ...

  6. java转安卓快吗_安卓开发者要从Java转到Kotlin吗?谷歌说后者支持更多

    IT之家5月13日消息 在今年谷歌I/O大会上,谷歌宣布下一步最重要的是"Kotlin first".越来越多的安卓开发者也开始从Java转向Kotlin,许多新的Jetpack ...

  7. java list有序还是无序_最详细的Java学习点知识脑图,从基础到进阶,看完还有啥你不懂的...

    欢迎关注专栏<Java架构筑基>--专注于Java技术的研究与分享! Java架构筑基​zhuanlan.zhihu.com Java架构筑基--专注于Java技术的研究与分享! 后续文章 ...

  8. java编写代码用什么_如何学习用Java编写代码:为什么要学习以及从哪里开始

    java编写代码用什么 by John Selawsky 约翰·塞劳斯基(John Selawsky) 如何学习用Java编写代码:为什么要学习以及从哪里开始 (How to learn to cod ...

  9. java寻找最大的字母_【LeetCode(Java) - 744】寻找比目标字母大的最小字母

    [LeetCode(Java) - 744]寻找比目标字母大的最小字母 [LeetCode(Java) - 744]寻找比目标字母大的最小字母 文章目录 1.题目描述 2.解题思路 3.解题代码 1. ...

最新文章

  1. .NET开发微信小程序-微信支付
  2. python iot平台_Python MQTT连接到Azure Iot中心
  3. shell之常用脚本
  4. liunx学习笔记1
  5. 12333新农合网上查询_新农合医保查询缴费平台|新农村医疗保险网上缴费平台
  6. datagridview控件读写mysql数据库表格的方法_c# datagridview表格控件常用操作
  7. python编程可以自学么-终于发现怎么自学python编程
  8. 第一期_内存管理单元MMU
  9. mpa和pis_有关压力单位pis-bar-mpa的换算
  10. Vue 3.0 Ref-sugar 提案真的是自寻死路吗?
  11. 用pdfminer把PDF文件转化为文本文件
  12. 高速工业相机应用领域
  13. 《禅与摩托车维修艺术》摘录(一)
  14. 不是有效的win32应用程序_什么是模块,各种模块的有效行为(1)
  15. hackinglab-脚本关5——逗比验证码第一期
  16. 下载Visual Studio
  17. ATMEGA88PA-AU与ATMEGA88-20AU的区别
  18. [FAQ09717]如何去掉mtk自行开发的OOBE快速向导 功能中的某段操作引导视频的播放?
  19. 记录一下我low到down的心情
  20. iview 单元格合并

热门文章

  1. 位居行业第一,智能投影品牌坚果迎来3C数码零售行业的“扬眉曲线”?
  2. 租不起房!你离逃离北上广还有多长时间?
  3. java邻接表无向图的创建_邻接表无向图(三) 之Java详解
  4. c++将小数化为二进制_C/C+学习笔记:C语言实现任意进制转换,代码全解析!...
  5. php 表单搜索,wordpress的搜索表单searchform.php
  6. 大数据实训记录(二)
  7. 打印合同_批量打印合同用印申请单
  8. Python基础入门:常用的os操作
  9. python基础教程:Counter类
  10. python实现顺序查找和哈希查找