回溯法之数独 详解

作者: taylar_where | 来源:发表于2019-05-28 21:20 被阅读1次

我从高中起就很喜欢数独这种娱乐方式,喜欢那种为了解出一个数独的执着,喜欢那份坚持,出于这种心情,我选择用java来实现一个数独从无到有的过程。喜爱玩数独的人应该知道,数独的限制条件很有意思:首先,一个9*9的九宫格被分成了九个区域,如图所示,不同颜色区域划分成不同区域。

图一

限制条件1:同一个格子内(色块)不能出现相同的数;

限制条件2:同一行内不能出现相同的数字

限制条件3:同一列内不能出现相同的数字

如何在满足上述条件的同时,还将这81个格子填满?这就是我今天要分享给大家的内容。

首先,我们可以将问题简化一下,我可以先把数字一存放到格子中,然后放置数字二,知道存放数字九,将数字一(二、三、...、九)放入九宫格的过程和八皇后问题非常相似(关于八皇后问题可以查看我上一篇博客八皇后问题),所以现在问题很简单了,问题就变成了依次将数字1~9放入九宫格,但是,问题不会就这么简单的,在实现代码的过程中,我发现,如果在放置数字7的时候,没有合法的位置(这种情况显然是存在的),那么现在就需要回溯到上一个数字6了,但是问题出现了,在针对每个数字的回溯的时候,我明确的知道如果一行都无法方式放置,就该回溯了,放第一行没有合法位置放置,我就该回溯到上一个数字6,但是,回溯到数字6时,我怎么确定回溯到数字5的条件呢?关于这个数值是不确定的,数字6到数字5的阀值和数字5到数字4的阀值肯定是不同的?想了很久还是没能想象出完美的解决方法,我决定退而求其次,我将阀值设定为100,也就是说,到了100的阀值,我就继续向上回溯。

本人通过Java代码是实现了一个数独的生成,但是,因为本人无法在简书上将代码以一种整齐的方式展现给大家,所以,如果有想要程序代码的朋友可以移步到本人的CSDN:数独实现

相关文章

  • 回溯法之数独 详解

    我从高中起就很喜欢数独这种娱乐方式,喜欢那种为了解出一个数独的执着,喜欢那份坚持,出于这种心情,我选择用java来...

  • 优化建模之MiniZinc(三) 全局约束 -- 以解数独为例

    数独问题中约束的表达 数独是一个经典的问题,在计算机科学中,我们通常使用回溯法来进行求解,但是对于规模稍大的数独问...

  • 回溯数独问题

    分析: 分了两种方法,第一种按大小走,第二种按照坐标。其中,第二种需注意:1、到n-1行/列的时候判断2、切莫忽略...

  • 数独 #回溯算法 #CTF

    1. intro:巅峰极客的一道逆向 刷巅峰极客2020里的rev题fu!kpy,复杂得不行但是看到if d[1]...

  • 回溯法小结(leetcode37)解决数独问题

    数独题如下,求出解答 题目给定的数据是:["5","3",".",".","7",".",".",".","."]...

  • N皇后

    回溯法核心代码: n皇后问题回溯法

  • [回溯算法]python解决N皇后问题(20行代码)

    如果读者对于回溯算法思路解法还不是很了解,可以先点击链接查阅我之前的一篇博文《算法之【回溯算法】详解[https:...

  • 数独杀人法

    (1) 星期日是个晴朗的一天,恶棍张三约罗氓在简单咖啡馆碰面。 此人在花竹园小区臭名昭著,偷摸拐骗样样在行,简直是...

  • js数独解析,以及数独九宫格生成

    解数独 生成九宫格的思路 先在上面的1、5、9(3*3)框内填写1-9的随机数 再使用回溯法填写其他的空格

  • 回溯法(九宫格、八皇后、数独)

    1、九宫格 算法规则: 把 1 放到第一行的中间 开始向右上角放入后面的数字如果右上是空的,直接填入如果右上已经填...

网友评论

    本文标题:回溯法之数独 详解

    本文链接:https://www.haomeiwen.com/subject/luijtctx.html