美文网首页程序员
编程之美之构造数独

编程之美之构造数独

作者: 娟子 | 来源:发表于2014-04-08 15:40 被阅读0次

数独(すうどく,Sūdoku)是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫内的数字均含1-9,不重复。

问题:

构造一个9*9的方格矩阵,玩家要在每个方格中,分别填上1至9的任意一个数字,让整个棋盘每一列、每一行以及每一个3*3的小矩阵中的数字都不重复。

解法一

首先用二维数组的结构来存储数独游戏sudoku[][9],通过经典的深度优先搜索来生成一个可行解。

深度优化搜索算法

从[0][0]开始对于没有处理过的格子获得一个可取的值,在搜索过程中如果没有发现可行的值则回溯,修改前一个格子的取值。直到所有的格子都取到可行的值为止,这时候我们就找到了一个可行的解。

算法流程图:

算法复杂度:O(n^2)

解法二

置换法,就是用矩阵行交换和列交换,这个方法的优点就是速度很快,缺点就是只能构造9!种,离所有合法数独总数差的很远。

算法实现过程:

1.假设已经有一个3 *3的矩阵是排列好的,具体的数字暂时用字母代替,如下图所示:

2.把整个数独矩阵的各个小矩阵(也就是宫)分别命名为B1,B2,...,B9:

3.将已有的3*3矩阵放在B5的位置,得到如下图所示矩阵:

4.通过置换行的方法,把B4和B6矩阵填好。

5.对中央小矩阵的每一列做同样的变换,得到B2和B8.

相关文章

  • 编程之美之构造数独

    数独(すうどく,Sūdoku)是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9×9盘面上的已知数字,推理出所有剩...

  • 数独数独

    想找人一起玩数独,你在哪?

  • 并发编程之美-终章chat

    一、Java 并发编程之美:并发编程高级篇之五 微信扫码二维码加入本 Chat 作为 Java 并发编程之美系列的...

  • 2019.03.03(52) 晚间10:10 数独

    2019.03.03(52) 晚间10:10, 今日所感之是:数独。 很早之前其实就听说过数独,只是最近在大宝的数...

  • 数独之每日解析

    一不小心就沉迷数独无法自拔,起初只是当做锻炼脑子的益智小游戏,后来看到了相关的数独解题技巧,才知道原来方格间还蕴藏...

  • 算法之数独填充

    该题目为:给定如下所示的数独,编写出算法填充数独空白部分,假设该数独只有唯一解。 最近做到该数独题,个人认为有必要...

  • 数独数独我爱你

    好久没玩数独了,昨天在图书馆借书时突发奇想查了有关数独的书,有好多!借了一本非常数独,回家就迫不及待地翻阅,哇塞,...

  • 美是静态的,不需动之逢迎

    “美是动态的,在于植物生长之动,在于思想移转之动,在于呈现过程之动;美也是静态的,不需动之逢迎。”这是几年前我写的...

  • 于平淡生活里发现美

    “生活并不缺少美,只是缺少发现美的眼睛”。这种美可以是生活本身之美,景色之美,艺术之美……我始终相信只要具有自己独...

  • Golang面向对象编程之构造函数【struct&new

    [TOC] Golang面向对象编程之构造函数【struct&new】 201808 构造函数是一种特殊的方法,主...

网友评论

    本文标题:编程之美之构造数独

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