python解数独--世界最难数独2.3秒完成_【数独】世界最难数独90+毫秒解决。一个不错的算法...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
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+毫秒解决。一个不错的算法...相关推荐
- python有三个包如何只导入两个包_云计算开发学习笔记:Python3如何从一个包中导入*...
来源:TechWeb.com.cn 设想一下,如果我们使用 from sound.effects import *会发生什么?Python 会进入文件系统,找到这个包里面所有的子模块,一个一个的把它们 ...
- html电梯怎么设计,迷你世界电梯是制作方法 电梯怎么制作_迷你世界
迷你世界虽然有很多玩家在玩,但是依然有玩家并不清楚电梯是怎么去做的,下面我们来看一看制作电梯的方法. 制作电梯一定要准备材料,也就是通过电能产生器,机械臂,还有滑动方块移触碰按钮等等,这些材料一定要准 ...
- 用python解数独
本文转自:python解数独--世界最难数独2.3秒完成 解数独用的就是深度优先搜索,有几个方面可以优化一下提高速度: 1.把每个空格的可能的点先列举出来,因为深搜是把遍历的值写入sudoku矩阵再判 ...
- 6个步骤教你用Python解数独!(含实例代码)
前言: 今天为大家带来的内容是:6个步骤教你用Python解数独!(含实例代码),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,喜欢本文内容的话记得点赞转发收藏不迷路哦! ...
- delphi dbgrideh 遍历每一个单元格_用Python解数独[1]:求每个单元格的行值域
目录 用Python解数独[0] 用Python解数独[1]:求每个单元格的行值域 用Python解数独[2]:求列值域和九宫格值域 用Python解数独[3]:求总值域 用Python解数独[4]: ...
- python deepcopy函数_用Python解数独[6]:递归获得最终答案
目录 用Python解数独[0] 用Python解数独[1]:求每个单元格的行值域 用Python解数独[2]:求列值域和九宫格值域 用Python解数独[3]:求总值域 用Python解数独[4]: ...
- Python解武士数独问题
组合数学题如下: ![](https://img-blog.csdnimg.cn/6c922566babc4a87baace8e84078376d.png 参考这位博主的的链接:Python解9*9数 ...
- 奥数 python_奥数赛事china夺得冠军!简单思路用Python解经典数学题
2019年第60届国际数学奥林匹克竞赛(IMO)结果出炉,奥数大赛中国夺冠 ,中美两国同时以227的总分并列团体冠军.中国队王者归来!6名队员全部摘金,总成绩荣获世界第一! 不要错过 免费学习Pyth ...
- 【pyhton解决数学问题】2用python解方程
目录 1Sympy的基本概念 1符号计算 2计算机代数系统 3实际解方程 1把未知数设为符号 2用solve()解方程 1解一元一次方程 2解二元一次方程组 3解决一元二次方程 总结 哈喽,大家好! ...
- python解多元多次方程组_Python求解多重或非线性方程,python,多元,多次,方程组,线性方程组...
背景: 如何使用python求解多元多次方程组或者非线性方程组. 原创内容,转载注明出处!请勿用于商业用途! (上篇用python拟合2019nCov感染人数的文章被不少博主转载了,发的比较早,不少博 ...
最新文章
- 结构型模式之Facade模式
- 用python学编程_用Python学编程
- TC SRM 562 div2 B 题
- 云效云栖大会首发应用交付和项目协作新品,助力企业DevOps到BizDevOps
- java 枚举 values_JAVA 枚举运用一 values方法
- linux unix mac windows,文件路径-windows上的反斜杠和Mac OS/Linux/Unix上的正斜杠,Windows,倒,以及,macOSLinuxUNIX...
- HDU 5835 Danganronpa 贪心
- open cv+C++错误及经验总结(三)
- PowerAI DDL
- mysql dump 拒绝访问_Delphi开发的数据库程序在C:\PDOXUSRS.NET生成文件,拒绝访问及读写权限...
- c语言软件下载与配置
- 网页特殊符号(HTML字符实体)大全
- Java+spring基于ssm的基于SSM的高校奖学金助学金管理系统
- docker容器中获取宿主机任意信息
- 一网打尽!2018网络安全事件最全的盘点
- mfc opengl 三维地形图_深圳pmax巨影三维扫描仪
- SSH(远程登录和文件复制)
- java关闭端口_使用java代码关闭指定端口的程序-windows
- 奥林匹克杯,授予中国人民!
- [再寄小读者之数学篇](2014-11-02 Herglotz' trick)
热门文章
- 疯狂java讲义第六章课后习题答案
- python3.6+Appium实现手机微信自动回复
- 大漠为什么不支持win10_Win10系统注册使用大漠插件的方法与设置!常见错误0x8002801...
- eclipse 快捷调整字体_eclipse字体大小设置快捷键
- 目标跟踪算法MOSSE笔记
- 制药企业常用质量管理软件TrackWise概述
- R语言入门-安装R和Rstuido软件
- MongoDB (芒果)安装说明创建与插入数据
- 计算机应用程序错误怎么办 6,WinXP电脑应用程序错误怎么办?
- matlab里直线拟合,matlab如何拟合直线