闲来无事,理了一下数独的判断逻辑,用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);
}
}
}

判断9X9数组是否是数独的java代码的更多相关文章

  1. java算法面试题:有数组a[n],用java代码将数组元素顺序颠倒

    package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.List; ...

  2. 剑指offer-第四章解决面试题思路(判断一个数组是否为二叉搜索树的后序遍历序列)

    二叉搜索树:二叉搜索树根节点的左边都比根节点小,右边都比根节点大. 例题:输入一个数组,判断是否为二叉搜索树的后序遍历序列,如果是,返回true,如果不是,返回flase,假设没有重复的元素. 思路: ...

  3. PHP如何判断一个数组是一维数组或者是二维数组?用什么函数?

    如题:如何判断一个数组是一维数组或者是二维数组?用什么函数? 判断数量即可 <?php if (count($array) == count($array, 1)) { echo '是一维数组' ...

  4. delphi 判断一个数组的长度用 Length 还是 SizeOf ?

    判断一个数组的长度用 Length 还是 SizeOf ?最近发现一些代码, 甚至有一些专家代码, 在遍历数组时所用的数组长度竟然是 SizeOf(arr); 这不合适! 如果是一维数组.且元素大小是 ...

  5. js如何判断一个数组

    typeof [] 为一个"object" 不能通过此方法判断一个数组 方法 1.instanceof方法,这个方法用的比较多. 2.这个是es5以后推荐的方法,Object.pr ...

  6. paip.判断文件是否存在uapi python php java c#

    paip.判断文件是否存在uapi python php java c# ==========uapi file_exists exists() 面向对象风格:  File.Exists 作者: 老哇 ...

  7. 如何判断一个GPS点是否在以另一个GPS点为圆心100米为半径的圆内(Java代码)

    题目乍一看,无从下手,仔细想了一下,原来只需要判断两个GPS点的直线距离是否<100米即可. Java代码如下: /** * 将两个经纬度坐标转化成距离(米) * * @param 2个GPS经 ...

  8. 判断php数组维度的小例子

    分享一例判断php数组维度的代码,供大家参考. 如下所示: <?php /** * 返回数组的维度 * @param [type] $arr [description] * @return [t ...

  9. [改善Java代码]动态加载不适合数组

    上一个建议解释了为什么要使用forName,本建议就说说哪些地方不适合使用动态加载. 如果forName要加载一个类,那它必须是一个类------8中基本类型就排除在外.它们不是一个具体的类. 其次它 ...

随机推荐

  1. 解决MySql Access denied for user 'root'@'192.168.1.119' to databse 的问题

    因为ip未授权,在navicat中执行 grant all privileges on *.* to 'root'@'192.168.1.119' identified by 'root' with ...

  2. Jmeter 常用函数(29)- 详解 __eval

    如果你想查看更多 Jmeter 常用函数可以在这篇文章找找哦 https://www.cnblogs.com/poloyy/p/13291704.html 作用 和 __V 的作用基本一致,执行变量名 ...

  3. CF208E Blood Cousins 题解

    一个奇奇怪怪的复杂度很垃圾的线段树合并解法 通过分析可以发现,要找$x$的$k$辈兄弟,只需要找到$x$的$k$辈祖先,然后查找以该祖先为根的子树中和$x$深度相同的节点个数$-1$即可.也就是说,询 ...

  4. 焦大:seo思维进化论(中)

    http://www.wocaoseo.com/thread-52-1-1.html 给你一个网站,你第一步做的是什么?我觉得这个是一个绝好的问题,但是却也是个难题,最常见的答案是莫过于做修改标题/查 ...

  5. WebRTC的VAD 过程解读

    摘要: 在上一篇的文档中,分析unimrcp中vad算法的诸多弊端,但是有没有一种更好的算法来取代呢.目前有两种方式 1. GMM   2. DNN. 其中鼎鼎大名的WebRTC VAD就是采用了GM ...

  6. 【洛谷日报#26】GCC自带位运算系列函数

    文章转自 洛谷 谈到GCC的黑科技,大家想到的一定是这句: #pragma GCC optimize (3)//吸氧 抑或是这句: #pragma GCC diagnostic error " ...

  7. 移动开发中如何整合HTML 5和原生代码

    移动开发中如何整合HTML 5和原生代码 https://blog.csdn.net/lvjin110/article/details/41038565

  8. js扩展运算符(spread)三个点(...)

    常见用法: 1.该运算符主要用于函数调用. function push(array, ...items) { array.push(...items); } function add(x, y) { ...

  9. python3笔记-读取ini配置文件

    在代码中经常会通过ini文件来配置一些常修改的配置.下面通过一个实例来看下如何写入.读取ini配置文件. 需要的配置文件是: [path] back_dir = /Users/abc/PycharmP ...

  10. 深入了解Kafka【五】Partition和消费者的关系

    1.消费者与Partition 以下来自<kafak权威指南>第4章. 假设主题T1有四个分区. 1.1.一个消费者组 1.1.1.消费者数量小于分区数量 只有一个消费者时,消费者1将收到 ...