在其他地方看到这个方法,稍微修改了一下,贴出来

用到Shudu和Grid两个类,

运行 Shudu里的main方法,

我读取的是本地文件,据说这个是神马大师设计的最难数独,大家可以自行修改

package shudu;

import java.io.*;

import java.text.SimpleDateFormat;

import java.util.*;

public class Shudu {

public static void main(String[] args) throws Exception {

SimpleDateFormat dfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

Date begin=dfs.parse(dfs.format(new Date()));

String arg = "C:/shudu.txt";

FileReader rd = new FileReader(arg);

while (true) {

Grid grid = Grid.create(rd);

if (grid == null) {

break;

}

List solutions = new ArrayList();

solve(grid, solutions);

printSolutions(grid, solutions);

}

Date end=dfs.parse(dfs.format(new Date()));

long between=end.getTime()-begin.getTime();

System.out.println("use Time:"+between+"ms");

}

private static void solve(Grid grid, List solutions) {

if (solutions.size() >= 2) {

return;

}

int loc = grid.findEmptyCell();

if (loc < 0) {

solutions.add(grid.clone());

return;

}

for (int n=1; n<10; n++) {

if (grid.set(loc, n)) {

solve(grid, solutions);

grid.clear(loc);

}

}

}

private static void printSolutions(Grid grid, List solutions) {

System.out.println("Original");

System.out.println(grid);

if (solutions.size() == 0) {

System.out.println("Unsolveable");

} else if (solutions.size() == 1) {

System.out.println("Solved");

} else {

System.out.println("At least two solutions");

}

for (int i=0; i

System.out.println(solutions.get(i));

}

System.out.println();

System.out.println();

}

}

package shudu;

import java.io.Reader;

public class Grid implements Cloneable {

int[] cells = new int[81];

int[] colsSet = new int[9];

int[] rowsSet = new int[9];

int[] subgridSet = new int[9];

public static Grid create(Reader rd) throws Exception {

Grid grid = new Grid();

for (int loc=0; loc

int ch = rd.read();

if (ch < 0) {

return null;

}

if (ch == '#') {

while (ch >= 0 && ch != '\n' && ch != '\r') {

ch = rd.read();

}

} else if (ch >= '1' && ch <= '9') {

grid.set(loc, ch-'0');

loc++;

} else if (ch == '.' || ch == '0') {

loc++;

}

}

return grid;

}

public int findEmptyCell() {

for (int i=0; i

if (cells[i] == 0) {

return i;

}

}

return -1;

}

public boolean set(int loc, int num) {

// Compute row and column

int r = loc/9;

int c = loc%9;

int blockLoc = (r/3)*3+c/3;

boolean canSet = cells[loc] == 0

&& (colsSet[c] & (1<

&& (rowsSet[r] & (1<

&& (subgridSet[blockLoc] & (1<

if (!canSet) {

return false;

}

cells[loc] = num;

colsSet[c] |= (1<

rowsSet[r] |= (1<

subgridSet[blockLoc] |= (1<

return true;

}

public void clear(int loc) {

// Compute row and column

int r = loc/9;

int c = loc%9;

int blockLoc = (r/3)*3+c/3;

int num = cells[loc];

cells[loc] = 0;

colsSet[c] ^= (1<

rowsSet[r] ^= (1<

subgridSet[blockLoc] ^= (1<

}

public Grid clone() {

Grid grid = new Grid();

grid.cells = cells.clone();

grid.colsSet = colsSet.clone();

grid.rowsSet = rowsSet.clone();

grid.subgridSet = subgridSet.clone();

return grid;

}

public String toString() {

StringBuffer buf = new StringBuffer();

for (int r=0; r<9; r++) {

if (r%3 == 0) {

buf.append("-------------------------\n");

}

for (int c=0; c<9; c++) {

if (c%3 == 0) {

buf.append("| ");

}

int num = cells[r*9+c];

if (num == 0) {

buf.append("0 ");

} else {

buf.append(num+" ");

}

}

buf.append("|\n");

}

buf.append("-------------------------");

return buf.toString();

}

}

http://www.dengb.com/Javabc/526513.htmlwww.dengb.comtruehttp://www.dengb.com/Javabc/526513.htmlTechArticle在其他地方看到这个方法,稍微修改了一下,贴出来 用到Shudu和Grid两个类, 运行 Shudu里的main方法, 我读取的是本地文件,据说这个是神马...

java数独最快解,Java解数独--世界最难数独相关推荐

  1. Python来处理数独游戏(含世界最难数独示例)

    数独(sudoku)是一种填数字的游戏,在一个9*9的九宫格里面推导出剩余的数字,要求每行.每列.每宫(3*3)的数字均包含1~9,且不重复! 另:世界最难数独(题目中的最后一个数独)被江苏扬州一位农 ...

  2. 一次Java解析数独的经历,java面试题,java高级笔试题

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 1. ...

  3. 数独java界面基础_Java从基础到进阶学习之路—-数独小游戏制作(二) | 学步园...

    详细设计 游戏数据结构设计 显然,需要存储数据的地方只有九宫格地图部分. 对于地图,很明显我们可以采用二维数组int [] [] game;来存储地图中的数据.但是int的二维数组虽然直接简单,但是还 ...

  4. 【Java】Lucene检索引擎详解

    基于Java的全文索引/检索引擎--Lucene Lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能. L ...

  5. java拉姆达表达式事例,Java Lambda表达式详解和实例

    简介 Lambda表达式是Java SE 8中一个重要的新特性.lambda表达式允许你通过表达式来代替功能接口. lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体( ...

  6. java斐波那契查找_详解Java Fibonacci Search斐波那契搜索算法代码实现

    一, 斐波那契搜索算法简述 斐波那契搜索(Fibonacci search) ,又称斐波那契查找,是区间中单峰函数的搜索技术. 斐波那契搜索采用分而治之的方法,其中我们按照斐波那契数列对元素进行不均等 ...

  7. tcp网络通信教程 java_基于java TCP网络通信的实例详解

    JAVA中设计网络编程模式的主要有TCP和UDP两种,TCP是属于即时通信,UDP是通过数据包来进行通信,UDP当中就会牵扯到数据的解析和传送.在安全性能方面,TCP要略胜一筹,通信过程中不容易出现数 ...

  8. 3.5W 字详解 Java 集合

    点击关注公众号,实用技术文章及时了解 来源:binhao.blog.csdn.net/article/details/113279914 数据结构作为每一个开发者不可回避的问题,而 Java 对于不同 ...

  9. Java开发常见面试题详解(并发,JVM)

    预览 并发 问题 详解 请谈谈你对volatile的理解 link CAS你知道吗? link 原子类Atomiclnteger的ABA问题谈谈?原子更新引用知道吗? link 我们知道ArrayLi ...

  10. 传智教育|2022最新版Java学习路线图全集汇总——Java学习到底学什么?一文详解

    2022版Java学习路线图来了! 每一年的Java学习路线图都会根据当前市场趋势做调整,也能更有针对性的对小伙伴的Java学习之旅提供帮助,这次小智给大家带来了2022最新版的Java学习路线图,内 ...

最新文章

  1. 网络流最大流 Dinic算法模板
  2. 【Matlab 图像】灰度二值化处理
  3. Elasticsearch2.x Doc values
  4. 云炬创业政策学习笔记20210112
  5. OpenCASCADE绘制测试线束:几何命令之Intersections
  6. 【洛谷】1600:天天爱跑步【LCA】【开桶】【容斥】【推式子】
  7. 美国新泽西州,也有一个Menlo Park——门洛公园,尽管不太为人熟知,但爱迪生那里的一个发明却点亮了全世界。...
  8. 病毒库的备份及***隐藏地址
  9. 万万没想到,低功耗也会烧毁元器件?
  10. Android 虚拟机EditText键盘无法输入解决方法
  11. 利用Scrapy编写“1024网站种子吞噬爬虫”,送福利
  12. 求不变矩matlab,求HU不变矩七个参数
  13. 一加5应用未安装怎么解决_如何解决一加手机x安装不了软件下载的问题?
  14. 广州羚羊社科技跑付app健身中心开业,涉足健身领域,人头爆满全场热销
  15. Cisco Viptela SD-WAN 基本部署
  16. 忘记密码怎么办,密码查看器X-pass
  17. centos7应用笔记:键盘重影射
  18. linux $ PATH=~/bin:$PATH这个命令是什么意思?
  19. Java大型智慧物业管理系统源码
  20. 决定改装iMac——2011款iMac21寸 换ssd硬盘

热门文章

  1. php对接海康视频教程_海康安防管理平台Web视频对接
  2. UVC系列2-探索Android UVC协议
  3. USB(UVC协议)摄像头
  4. lm算法c语言,lm算法(lm算法原理介绍)
  5. 项目管理中,制定项目进度计划有何意义?
  6. getshell工具下载批量ecshop4.0全版本通杀工具下载
  7. SI9000阻抗计算教程
  8. android开源人脸识别插件,face-android-demo
  9. 10年老技术员教你免费的、完整的把 PDF 转换为 Word
  10. matlab已知斜率画直线,MATLAB 霍夫变换 连接斜率相同的直线