闲来无事,理了一下数独的判断逻辑,用java实现,代码如下

import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
/**************************************
使1-9每个数字在每一行、每一列和每一宫中都只出现一次
**************************************/
public class SuDoKu
{
//日志记录器
private static Logger logger =Logger.getLogger("SuDoKu");
static{
try{
//方法返回日志文件存放的路径
FileHandler fh = new FileHandler("D:/adrian/sudoku.log",true);
fh.setFormatter(new SimpleFormatter());
//fh.setEncoding("UTF-8");
logger.addHandler(fh);
logger.setLevel(Level.ALL);
}catch(Exception e){
logger.log(Level.WARNING,"------日志初始化异常------\r\n",e);
}
}

private static void display(int a[][]){
for(int i=0;i<9;i++){
String temp="";
for(int j=0;j<9;j++){
temp+="\t"+a[i][j];
}
logger.info(temp);
}
}
/**
* 判断数组是否合法
*/
public static boolean isLegal(int a[][]){
//判断横向、纵向
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
for(int k=j+1;k<9;k++){
//判断横向是否符合要求
if(a[i][j]!=0&&a[i][k]==a[i][j])
return false;
//判断纵向是否符合要求
if(a[j][i]!=0&&a[k][i]==a[j][i])
return false;
}
}
}
//判断九宫
int flag=0;
while(flag<6){
for(int i=0+flag;i<3+flag;i++){
for(int j=0+flag;j<3+flag;j++){
for(int k=i+1;k<3+flag;k++){
for(int l=j+1;l<3+flag;l++)
if(a[i][j]!=0&&
a[i][j]==a[i][l]&&
a[i][j]==a[k][j]&&
a[i][j]==a[k][l])
return false;
}
}
}
flag=flag+3;
}
return true;
}

//测试
public static void main(String[] args){
int [][] a={
{9,8,5,7,6,2,1,3,4},
{2,6,7,1,3,4,5,8,9},
{3,1,4,8,9,5,7,6,2},
{8,3,2,9,7,6,4,5,1},
{1,7,6,4,5,3,2,9,8},
{5,4,9,2,1,8,6,7,3},
{6,2,1,3,8,7,9,4,5},
{4,5,3,6,2,9,8,1,7},
{7,9,8,5,4,1,3,2,6}
};
boolean flag=isLegal(a);
if(flag){
logger.info("\t\t\t\t以下数组是数独");
display(a);
}else{
logger.info("\t\t\t\t以下数组不是数独");
display(a);
}
}
}

最新文章

  1. 一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统
  2. C/C++:提升_头文件的使用
  3. iOS开发之网络数据解析(二)--XML解析简介
  4. [NOIP2016-day1-T2]天天爱跑步running_题解
  5. 【每日scrum】NO.2
  6. Photoshop技巧:图层蒙版同步隐藏图层样式
  7. 安装opencms时遇到问题及解决方法
  8. PLSQL developer连接不上64位Oracle的解决方法
  9. 8_Times_Tables
  10. C语言的指针使用
  11. java8中Stream数据流
  12. 【Matlab编程】马氏链随机模拟
  13. Git 撤销所有未提交(Commit)的内容
  14. C#编程(四十八)----------列表
  15. React.js - 入门
  16. 「Django」与mysql8连接的若干问题
  17. 深入理解javascript闭包【整理】
  18. 水晶报表导出完美EXCEL表格
  19. koa2 从入门到进阶之路 (四)
  20. ASCII码表含义

热门文章

  1. TCL(事务控制语言)
  2. GRMS_README
  3. 微信公众号请求code时报redirect_uri 参数错误
  4. CentOS 阿里源
  5. Linux下安装mysql时报错:FATAL ERROR: please install the following Perl modules before executing ./scripts/mysql_install_db:Data::Dumper
  6. foreach循環體控制
  7. /usr/bin/ld: cannot find -lcrypto
  8. 前端测试框架Jest——语法篇
  9. Maven快速入门(四)Maven中的pom.xml文件详解
  10. 轮廓线DP