数独问题描述

标准的数独游戏是在一个 9 X 9 的棋盘上填写 1 – 9 这 9 个数字,规则是这样的:

  • 棋盘分成上图所示的 9 个区域(不同颜色做背景标出,每个区域是 3 X 3 的子棋盘),在每个子棋盘中填充 1 – 9 且不允许重复 ,下面简称块重复
  • 每一行不许有重复值 ,下面简称行重复
  • 每一列不许有重复值 ,下面简称列重复

如上红色框出的子区域中的亮黄色格子只能填 8。

解决思路一描述:

1.使用二维数组表示数独,不确定的数使用0填充。

2.从位置(0,0)开始遍历二维数组。

3.跳过已确定的数字,直到找到第一个不确定的数(即数值0)。如果找不到不确定的数字,则表示数独已填充完成。

4.根据当前数值0的位置,排除到同行、同列、同一个小宫格中已经出现的数字,得到当前位置所有允许填充的数字。

5.如果不存在允许填充的数字,则当前数独无解。

6.尝试填充每一个允许的数字,并递归填充下一个不确定的数字。

7.如果递归填充成功,返回成功。

8.如果递归填充失败,回退步骤6中填充的数字,并跳转到6继续尝试下一个允许的数字。

相关代码后续补充。

缺点:数独中每一个未确定的值都需要递归穷举,最大的递归层级等于未确定值的数目。

改进方式:每填充一个值,在递归填充之前,动态计算每个待填充值的候选数字,删除不再符合规则的候选数字。如果有位置的候选数字为空,则数独无解。如果有位置的候选数字只有唯一一个,则直接填充该数字。通过上述两种方式可以有效减少递归的层次。

数独解法Java实现相关推荐

  1. [LeetCode] 36. 有效的数独(java实现)模拟题

    [LeetCode] 36. 有效的数独(java实现)模拟题 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算法思想 6. 总结 1. ...

  2. 【蓝桥杯VIP】试题 历届试题 带分数(满分 Python解法+Java解法)

    [蓝桥杯VIP]试题 历届试题 带分数(满分 Python解法+Java解法) 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 100 可以表示为带分数的形式:100 = 3 + 6 ...

  3. 数独的Java版解法

    最近偶尔有玩数独,有的题太复杂了不好解,刚好看到LeetCode上有这样的题,就尝试写了个Java的解法. 1. 数独介绍 数独盘面是个九宫,每一宫又分为九个小格.在这八十一格中给出一定的已知数字和解 ...

  4. n*n/九宫格数独解法及随机生成java实现,独家

    该算法可解出任意无错误情况下的9宫格数独:理论上也能解决其他阶的同类型规则的数独.如22,33,44,55此类的.只不过耗时长短的问题. 目前代码跑出来的结果跑了22.33.4*4的解题和随机生成. ...

  5. java数独最快解_[分享]数独的JAVA解法

    package sodoku.puzzler; /** * 求解Sodoku Puzzler的工具类 * @author Eastsun */ public class Solver{ protect ...

  6. 24点游戏java_24点游戏动态规划解法(java)

    算法原理参考编程之美1.16章节解法2: 下面是java源码:子问题为S[i] U= Fork(f(x),f(i-x)); import java.util.HashMap; import java. ...

  7. 数独解法-变形数独(第一讲:介绍)

    第一讲:数独介绍(含变形) 数独基本规则 什么是数独?数独是一种益智游戏,最常见的有9宫格,也有五宫和七宫的异形,及四宫和六宫的正形,这里几宫代表N,在空格里填入数字1到N,使得每一行.每一列和每一个 ...

  8. 凑零钱问题的三种解法(Java)

    文章目录 问题描述: 1.递归解法 2.带备忘录的递归解法 3.dp数组动态规划解法 问题描述: 给你一个整数数组 coins ,表示不同面额的硬币:以及一个整数 amount ,表示总金额. 计算并 ...

  9. 数独游戏java版(一)--核心算法

    之前学习javascript时用javascript写过一个数独游戏,最近看了一点java的内容,于是就心血来潮想搞一个java版的数独游戏. 现在将全部代码分享出来和大家学习交流,当然代码中有着各种 ...

  10. 9 9简单的数独游戏python,python实现数独游戏 java简单实现数独游戏

    使用python和java实现数独游戏,有比较才有收获哦. 1.Python版 #--coding:utf-8-- import random import itertools from copy i ...

最新文章

  1. php 提取全部html标签,php提取html中的img标签
  2. 2.4带通采样的实际问题
  3. Jupyter notebook Ipython 魔法函数 Magic 计算代码(函数)耗时 Timing(%%time %time %timeit)
  4. 【spring boot】url中传递session id
  5. mysql 存储过程 模糊查询_Mysql之存储过程“模糊查询drop表”
  6. log4j无法打印日志的问题
  7. pro*C/C++支持c++开发实例
  8. Android成长日记-Android布局优化
  9. 使用训练好的googlenet caffemodel进行图片分类
  10. Ubuntu Eclipse 解决中文乱码
  11. ubuntu14.04小米无线网卡驱动安装
  12. 物业缴费管理系统 微小区 物业社区公众号开发 物业APP小程序源码
  13. MySQL索引优化面试题
  14. 仿微信在线聊天源码 DuckChat聊天系统PHP采用 PHP 编写的聊天软件,简直就是一个完整的迷你版微信
  15. 20190628 《此生,未完成》-- 于娟
  16. 实现回到顶部功能的三种方法
  17. 前端技术基础--笔记
  18. 房子装修选择自装,要敲墙如何在手机上申请住建局装修备案,几分钟即可拿到电子版备案通知书
  19. css实现立体长方柱
  20. 怎么关闭win10虚拟机服务器,大神为你win10系统彻底关闭退出vmware虚拟机的方案...

热门文章

  1. spyder python调试查看类信息_Python调试工具-Spyder
  2. android画布橡皮,Android 橡皮擦功能的实现
  3. eclipse将安卓项目commit至github本地仓库后,项目bin文件夹下不生成apk且运行报错
  4. oracle 依据日期查询,Oracle中日期作为条件的查询
  5. mysql查询叠字的名字_好听到爆的叠字小名
  6. 小感之绝知此事要躬行
  7. Java基础入门及安装准备
  8. Ignoring invalid timezone passed to Connection
  9. 大连理工大学软件学院2022年秋季学期《矩阵与数值分析》上机作业
  10. 为精简版VS2008添加DEBUG版运行时库到系统目录