判断9X9数组是否是数独的java代码
闲来无事,理了一下数独的判断逻辑,用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代码的更多相关文章
- java算法面试题:有数组a[n],用java代码将数组元素顺序颠倒
package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.List; ...
- 剑指offer-第四章解决面试题思路(判断一个数组是否为二叉搜索树的后序遍历序列)
二叉搜索树:二叉搜索树根节点的左边都比根节点小,右边都比根节点大. 例题:输入一个数组,判断是否为二叉搜索树的后序遍历序列,如果是,返回true,如果不是,返回flase,假设没有重复的元素. 思路: ...
- PHP如何判断一个数组是一维数组或者是二维数组?用什么函数?
如题:如何判断一个数组是一维数组或者是二维数组?用什么函数? 判断数量即可 <?php if (count($array) == count($array, 1)) { echo '是一维数组' ...
- delphi 判断一个数组的长度用 Length 还是 SizeOf ?
判断一个数组的长度用 Length 还是 SizeOf ?最近发现一些代码, 甚至有一些专家代码, 在遍历数组时所用的数组长度竟然是 SizeOf(arr); 这不合适! 如果是一维数组.且元素大小是 ...
- js如何判断一个数组
typeof [] 为一个"object" 不能通过此方法判断一个数组 方法 1.instanceof方法,这个方法用的比较多. 2.这个是es5以后推荐的方法,Object.pr ...
- paip.判断文件是否存在uapi python php java c#
paip.判断文件是否存在uapi python php java c# ==========uapi file_exists exists() 面向对象风格: File.Exists 作者: 老哇 ...
- 如何判断一个GPS点是否在以另一个GPS点为圆心100米为半径的圆内(Java代码)
题目乍一看,无从下手,仔细想了一下,原来只需要判断两个GPS点的直线距离是否<100米即可. Java代码如下: /** * 将两个经纬度坐标转化成距离(米) * * @param 2个GPS经 ...
- 判断php数组维度的小例子
分享一例判断php数组维度的代码,供大家参考. 如下所示: <?php /** * 返回数组的维度 * @param [type] $arr [description] * @return [t ...
- [改善Java代码]动态加载不适合数组
上一个建议解释了为什么要使用forName,本建议就说说哪些地方不适合使用动态加载. 如果forName要加载一个类,那它必须是一个类------8中基本类型就排除在外.它们不是一个具体的类. 其次它 ...
随机推荐
- java反序列化——XMLDecoder反序列化漏洞
本文首发于“合天智汇”公众号 作者:Fortheone 前言 最近学习java反序列化学到了weblogic部分,weblogic之前的两个反序列化漏洞不涉及T3协议之类的,只是涉及到了XMLDeco ...
- Shell编程—结构化命令(2)
1for命令 for命令的基本格式: for var in list do commands done 在list参数中,你需要提供迭代中要用到的一系列值. 1.1读取列表中的值 例子: $ vim ...
- asyncio异步模块的21个协程编写实例
启动一个无返回值协程 通过async关键字定义一个协程 import sys import asyncio async def coroutine(): print('运行协程') if sys.ve ...
- 区块链入门到实战(37)之Solidity – 循环语句
与其他语言类似,Solidity语言支持循环结构,Solidity提供以下循环语句. while do ... while for 循环控制语句:break.continue. Solidity – ...
- Win 10 蓝屏,出现DRIVER_POWER_STATE_FAILURE的解决方法
笔者个人笔记本电脑,用的是华硕的飞行堡垒FZ系列,上个月装了个Ubuntu的系统,之后换回Windows后,电脑疯狂蓝屏,错误代码只有这个DRIVER_POWER_STATE_FAILURE.一开始我 ...
- Docker 私有镜像仓库的搭建及认证
DockerHub 为我们提供了很多官方镜像和个人上传的镜像,我们可以下载机构或个人提供的镜像,也可以上传我们自己的本地镜像,但缺点是: 由于网络的原因,从 DockerHub 下载和上传镜像速度可能 ...
- js中call,apply和bind
1,首先先做一个定义:每个函数都包含两个非继承的方法:apply()和call(),apply和call这两个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值,两者唯一的 ...
- DevExpress的WidgetView的使用介绍
很多程序可能都会有一个首页综合展示系统的相关信息,如汇总信息,图表统计.待办业务.提醒信息等内容,在Web上可能叫做Dashboard仪表板,或者首页页面,不管哪种叫法,都是综合展示一些信息,提供一些 ...
- 2020重新出发,NOSQL,redis高并发系统的分析和设计
高并发系统的分析和设计 任何系统都不是独立于业务进行开发的,真正的系统是为了实现业务而开发的,所以开发高并发网站抢购时,都应该先分析业务需求和实际的场景,在完善这些需求之后才能进入系统开发阶段. 没有 ...
- tomcat7升级到tomcat8注意事项
第一点:context.xml配置jndi的参数修改 maxActive 替换为 :maxTotal maxWait 替换为 :maxWaitMillis factory="org.ap ...