Java生成数独函数
突然想写一下生成算法。代码注释的比较多,应该比较好理解
使用了递归
import java.util.ArrayList;
public class Sudoku {
static int sudokuBoard[][] = new int[9][9];
public static void main(String[] args){
generateMatrix(0);
}
//获取某点可用数列
static ArrayList<Integer> getVaildValueList(int x, int y){
ArrayList<Integer> vaildList = new ArrayList<>();
for(int i =1; i < 10;i++){
vaildList.add(i);
}
//x,y轴去重复
for(int i = 0;i < 9;i++){
Integer invaildNum1 = sudokuBoard[x][i];
Integer invaildNum2 = sudokuBoard[i][y];
if(invaildNum1 != 0 && vaildList.contains(invaildNum1)){
vaildList.remove(invaildNum1);
}
if(invaildNum2 != 0 && vaildList.contains(invaildNum2)){
vaildList.remove(invaildNum2);
}
}
//九小格去重复
for(int i = (x/3)*3; i<(x/3)*3+3; i++){
for(int j = (y/3)*3; j<(y/3)*3+3; j++){
Integer invaildNum = sudokuBoard[i][j];
if(invaildNum != 0 && vaildList.contains(invaildNum)){
vaildList.remove(invaildNum);
}
}
}
return vaildList;
}
//生成数独函数,便于传参使用,pos参数使用单个int代替
static boolean generateMatrix(int pos){
//pos对应的x,y
int x = pos/9;
int y = pos%9;
//生成本节点可用使用的值列表
ArrayList<Integer> validList = getVaildValueList(x, y);
//如果没有可用值返回false
if (validList.isEmpty()) {
return false;
}
//有值可以用,遍历值
for(int i =0; i < validList.size();i++){
sudokuBoard[x][y] = validList.get(i);
//如果此次赋值已经赋值到了最后一位,则输出整个数独。本应该这里是return true的地方,但是那样如果需要更多的结果就显示不出来了。
if(pos == 80){
for(int m = 0; m< sudokuBoard.length;m++){
for(int n = 0; n <sudokuBoard[m].length;n++){
System.out.print(sudokuBoard[m][n]);
}
System.out.println();
}
System.out.println("--------------------------");
sudokuBoard[x][y] = 0;
return false;
}
if(generateMatrix(pos+1) == true){ //递归在这
return true;
}
if(i == validList.size()-1) {
sudokuBoard[x][y] = 0;
return false;
}
}
return true;
}
}
Java生成数独函数的更多相关文章
- Android使用JNI(从java调用本地函数)
当编写一个混合有本地C代码和Java的应用程序时,需要使用Java本地接口(JNI)作为连接桥梁.JNI作为一个软件层和API,允许使用本地代码调用Java对象的方法,同时也允许在Java方法中调用本 ...
- Linux平台下Java调用C函数
JNI是Java native interface的简写,可以译作Java原生接口.Java可以通过JNI调用C/C++的库,这对于那些对性能要求比较高的Java程序无疑是一个 福音. 使用JNI也是 ...
- 【转】Java生成对应字符串的MD5密码模块
原文网址:http://www.cnblogs.com/xudong-bupt/archive/2013/05/10/3070899.html (1)一般使用的数据库中都会保存用户名和密码,其中密码不 ...
- Java生成MD5加密字符串代码实例
这篇文章主要介绍了Java生成MD5加密字符串代码实例,本文对MD5的作用作了一些介绍,然后给出了Java下生成MD5加密字符串的代码示例,需要的朋友可以参考下 (1)一般使用的数据库中都会保存用 ...
- c语言小程序以及java生成注释文档方法
c语言小程序:sizeof和strlen() sizeof运算符以字节为单位给出数据的大小,strlen()函数以字符为单位给出字符串的长度,字符和字节不是一回事. char类型用于存储字母和标点符号 ...
- C# 通过java生成的RSA公钥加密和解密
最近工作需要将对方公司生成的RSA加密公钥进行明文加密和解密,发现了几点贴出来做个笔记. RSA单次加密是有长度限制!微软封装的加密方法如果出现长度超出指定范围的话报错是直接报“该项不适于在指定状态下 ...
- java生成word的几种方案
http://blog.sina.com.cn/s/blog_a5e968370101crtl.html 1. Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建 ...
- 一次Java解析数独的经历
1. 背景 中午下楼去吃饭,电梯里看到有人在玩数独,之前也玩过,不过没有用程序去解过,萌生了一个想法,这两天就一直想怎么用程序去解一个数独.要去解开一个数独,首先要先了解数独的游戏规则,这样才能找到对 ...
- JAVA生成word的几种方法对比
首先介绍几种java导出word方案 1.Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁.使用Jacob自带的DLL动态链接库,并通过JNI的方式实现 ...
随机推荐
- 前端知识点总结(html+css)部分
HTML 1.一套规则,浏览器认识的规则. 2.开发者: 学习Html规则 开发后台程序: - 写Html文件(充当模板的作用) ****** - 数据库获取数据,然后替换到html文件的指定位置(W ...
- Elastic 技术栈之快速入门
Elastic 技术栈之快速入门 概念 ELK 是什么 ELK 是 elastic 公司旗下三款产品 ElasticSearch .Logstash .Kibana 的首字母组合. ElasticSe ...
- 04-MirrorGate安装脚本备注
1.run.sh #!/usr/bin/env bash set -e #当收到EXIT信号时执行这条命令,需要提前安装好docker-compose docker 并启动docker. trap ' ...
- Luogu4173 残缺的字符串 FFT
传送门 考虑如何使用FFT计算两个子串是否匹配.如果字符集比较小可以把每个字符都拿出来暴力做一遍,但是字符集比较大的时候复杂度就会有问题.这个时候可以考虑匹配函数. 先考虑没有通配符的情况.将\(A\ ...
- flask seesion组件
一.简介 flask中session组件可分为内置的session组件还有第三方flask-session组件,内置的session组件功能单一,而第三方的flask-sessoin可支持re ...
- 有关素数判断的一些算法(总结&&对比)
素性测试是数论题中比较常用的一个技巧.它可以很基础,也可以很高级(哲学).这次主要要介绍一下有关素数判断的奇技淫巧 素数的判断主要分为两种:范围筛选型&&单个判断型 我们先从范围筛选型 ...
- 解读tensorflow之rnn
from: http://lan2720.github.io/2016/07/16/%E8%A7%A3%E8%AF%BBtensorflow%E4%B9%8Brnn/ 这两天想搞清楚用tensorfl ...
- TiDB入门(四):从入门到“跑路”
前言 前面三章基本把 TiDB 的环境弄好了,也做了一下简单测试,有兴趣的同学可以看一下: TiDB 入门(一):TiDB 简介 TiDB 入门(二):虚拟机搭建 TiDB-Ansible 部署方案 ...
- testNG-失败用例重跑方法探究
实现IRetryAnalyzer类,重写其中的retry方法public class TestNGRetry implements IRetryAnalyzer { private int retry ...
- 递归遍历对象获取value值
let menu = { name: '一级菜单', data: { name: '二级菜单', data: { name: '三级菜单', data: { name: '四级菜单' } } } }; ...