该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

import java.util.Calendar;

public class Matrix {

private int matrix[][];

private long timeAfter=0;

private long timeBefore =0;

public Matrix(int m[][]) {

matrix = new int[9][9];

for (int i=0; i<9 ; i++)

for(int j= 0; j<9; j++)

matrix[i][j]=m[i][j];

this.timeBefore = Calendar.getInstance().getTimeInMillis();

}

public void backTrack(int i, int j)

{

if( i==8 && j>=9 )

{

this.timeAfter = Calendar.getInstance().getTimeInMillis();

//成功输出矩阵

this.showMatrix();

return;

}

if(j == 9) {j = 0; i++;}

if(matrix[i][j] == 0)

{

//数字为零

for(int k=1; k<=9; k++)

{

if(bound(i,j,k))

{

matrix[i][j] = k ;

//符合条件,查找下一个方格

backTrack(i,j+1);

matrix[i][j] = 0 ;

}

}

}else

{

//数字不为零,直接查找下一个

backTrack(i, j+1);

}

}

/**

* 判断要填入的数字和同行同列以及同一九宫格内数字是否重复

*/

private boolean bound(int i, int j, int k) {

int m = i/3;

int n = j/3;

for(int p = 0; p<9; p++)

{

if(k == matrix[i][p])

{

return false;

}

if(k == matrix[p][j])

{

return false;

}

if(k == matrix[3*m+p/3][3*n+p%3])

{

return false;

}

}

return true;

}

/**

* 打印解题时间

* @return

*/

public long printTime()

{

return this.timeAfter-this.timeBefore;

}

/**

* 打印矩阵

*/

public void showMatrix()

{

for(int i=0; i<9; i++)

{

for(int j=0; j<9; j++)

{

System.out.print(matrix[i][j]+" ");

}

System.out.println ();

}

System.out.println("解题时间: "+printTime()+"毫秒");

System.out.println ();

}

public static void main(String[] args) {

int matrix[][] = {

{3,0,6,0,5,7,0,0,0},

{7,9,0,0,2,4,0,0,0},

{0,5,0,6,0,0,9,7,4},

{8,0,1,0,0,9,0,0,0},

{0,2,0,3,0,8,0,0,7},

{4,0,0,0,6,0,5,0,0},

{0,0,4,0,3,6,0,5,0},

{2,0,3,7,0,5,0,0,1},

{0,0,7,4,1,0,6,0,0}};

int ma1[][]={

{0,3,0,0,0,5,0,6,0},

{0,1,0,0,0,3,0,8,0},

{0,4,0,0,0,0,0,0,7},

{0,0,7,0,2,4,0,0,0},

{5,0,0,0,9,0,0,0,0},

{0,8,0,3,0,0,5,0,0},

{0,0,0,8,0,0,0,0,0},

{0,0,9,0,0,0,0,7,3},

{0,5,0,9,0,0,0,0,2}};

int ma2[][]={

{0,0,0,0,0,4,0,0,0},//8

{0,0,0,2,0,3,0,8,0},

{8,3,0,9,0,0,0,5,0},

{0,5,3,0,9,0,7,0,0},

{0,0,0,6,3,0,0,4,5},//7

{0,7,0,5,0,0,0,0,0},

{0,0,6,8,0,0,0,0,0},

{3,0,0,0,2,9,0,0,0},

{2,0,9,0,0,0,0,0,1}};//3

// 号称世界上最难数独

int[][] sudoku = {

{ 8, 0, 0, 0, 0, 0, 0, 0, 0 },

{ 0, 0, 3, 6, 0, 0, 0, 0, 0 },

{ 0, 7, 0, 0, 9, 0, 2, 0, 0 },

{ 0, 5, 0, 0, 0, 7, 0, 0, 0 },

{ 0, 0, 0, 0, 4, 5, 7, 0, 0 },

{ 0, 0, 0, 1, 0, 0, 0, 3, 0 },

{ 0, 0, 1, 0, 0, 0, 0, 6, 8 },

{ 0, 0, 8, 5, 0, 0, 0, 1, 0 },

{ 0, 9, 0, 0, 0, 0, 4, 0, 0 }};

Matrix m = new Matrix(sudoku);

m.backTrack(0, 0);

}

}

python解数独--世界最难数独2.3秒完成_【数独】世界最难数独90+毫秒解决。一个不错的算法...相关推荐

  1. python有三个包如何只导入两个包_云计算开发学习笔记:Python3如何从一个包中导入*...

    来源:TechWeb.com.cn 设想一下,如果我们使用 from sound.effects import *会发生什么?Python 会进入文件系统,找到这个包里面所有的子模块,一个一个的把它们 ...

  2. html电梯怎么设计,迷你世界电梯是制作方法 电梯怎么制作_迷你世界

    迷你世界虽然有很多玩家在玩,但是依然有玩家并不清楚电梯是怎么去做的,下面我们来看一看制作电梯的方法. 制作电梯一定要准备材料,也就是通过电能产生器,机械臂,还有滑动方块移触碰按钮等等,这些材料一定要准 ...

  3. 用python解数独

    本文转自:python解数独--世界最难数独2.3秒完成 解数独用的就是深度优先搜索,有几个方面可以优化一下提高速度: 1.把每个空格的可能的点先列举出来,因为深搜是把遍历的值写入sudoku矩阵再判 ...

  4. 6个步骤教你用Python解数独!(含实例代码)

    前言: 今天为大家带来的内容是:6个步骤教你用Python解数独!(含实例代码),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,喜欢本文内容的话记得点赞转发收藏不迷路哦! ...

  5. delphi dbgrideh 遍历每一个单元格_用Python解数独[1]:求每个单元格的行值域

    目录 用Python解数独[0] 用Python解数独[1]:求每个单元格的行值域 用Python解数独[2]:求列值域和九宫格值域 用Python解数独[3]:求总值域 用Python解数独[4]: ...

  6. python deepcopy函数_用Python解数独[6]:递归获得最终答案

    目录 用Python解数独[0] 用Python解数独[1]:求每个单元格的行值域 用Python解数独[2]:求列值域和九宫格值域 用Python解数独[3]:求总值域 用Python解数独[4]: ...

  7. Python解武士数独问题

    组合数学题如下: ![](https://img-blog.csdnimg.cn/6c922566babc4a87baace8e84078376d.png 参考这位博主的的链接:Python解9*9数 ...

  8. 奥数 python_奥数赛事china夺得冠军!简单思路用Python解经典数学题

    2019年第60届国际数学奥林匹克竞赛(IMO)结果出炉,奥数大赛中国夺冠 ,中美两国同时以227的总分并列团体冠军.中国队王者归来!6名队员全部摘金,总成绩荣获世界第一! 不要错过 免费学习Pyth ...

  9. 【pyhton解决数学问题】2用python解方程

    目录 1Sympy的基本概念 1符号计算 2计算机代数系统 3实际解方程 1把未知数设为符号 2用solve()解方程 1解一元一次方程 2解二元一次方程组 3解决一元二次方程 总结 哈喽,大家好! ...

  10. python解多元多次方程组_Python求解多重或非线性方程,python,多元,多次,方程组,线性方程组...

    背景: 如何使用python求解多元多次方程组或者非线性方程组. 原创内容,转载注明出处!请勿用于商业用途! (上篇用python拟合2019nCov感染人数的文章被不少博主转载了,发的比较早,不少博 ...

最新文章

  1. 结构型模式之Facade模式
  2. 用python学编程_用Python学编程
  3. TC SRM 562 div2 B 题
  4. 云效云栖大会首发应用交付和项目协作新品,助力企业DevOps到BizDevOps
  5. java 枚举 values_JAVA 枚举运用一 values方法
  6. linux unix mac windows,文件路径-windows上的反斜杠和Mac OS/Linux/Unix上的正斜杠,Windows,倒,以及,macOSLinuxUNIX...
  7. HDU 5835 Danganronpa 贪心
  8. open cv+C++错误及经验总结(三)
  9. PowerAI DDL
  10. mysql dump 拒绝访问_Delphi开发的数据库程序在C:\PDOXUSRS.NET生成文件,拒绝访问及读写权限...
  11. c语言软件下载与配置
  12. 网页特殊符号(HTML字符实体)大全
  13. Java+spring基于ssm的基于SSM的高校奖学金助学金管理系统
  14. docker容器中获取宿主机任意信息
  15. 一网打尽!2018网络安全事件最全的盘点
  16. mfc opengl 三维地形图_深圳pmax巨影三维扫描仪
  17. SSH(远程登录和文件复制)
  18. java关闭端口_使用java代码关闭指定端口的程序-windows
  19. 奥林匹克杯,授予中国人民!
  20. [再寄小读者之数学篇](2014-11-02 Herglotz' trick)

热门文章

  1. 疯狂java讲义第六章课后习题答案
  2. python3.6+Appium实现手机微信自动回复
  3. 大漠为什么不支持win10_Win10系统注册使用大漠插件的方法与设置!常见错误0x8002801...
  4. eclipse 快捷调整字体_eclipse字体大小设置快捷键
  5. 目标跟踪算法MOSSE笔记
  6. 制药企业常用质量管理软件TrackWise概述
  7. R语言入门-安装R和Rstuido软件
  8. MongoDB (芒果)安装说明创建与插入数据
  9. 计算机应用程序错误怎么办 6,WinXP电脑应用程序错误怎么办?
  10. matlab里直线拟合,matlab如何拟合直线