在查阅了一些资料和自己动手写一写后,找到一种可行的解法。

  • 第一步

    首先将9x9的数独方格分成九份3x3的九宫格,如下图

B1 B2 B3
B4 B5 B6
B7 B8 B9

而后在左上角的B1上随机生成九个数填入,我们用abcdefghi等字母来代替数字和说明普遍性,如下(0代表尚未填入)

B1:a b c B2:0 0 0 B3:0 0 0

     d e f      0 0 0      0 0 0

     g h i      0 0 0      0 0 0

B4:0 0 0 B5:0 0 0 B6:0 0 0

     0 0 0      0 0 0      0 0 0

     0 0 0      0 0 0      0 0 0

B7:0 0 0 B8:0 0 0 B9:0 0 0

     0 0 0      0 0 0      0 0 0

     0 0 0      0 0 0      0 0 0

  • 第二步

    将B1的每一行进行自上而下的交换,分别填入B2、B3中,将列自右而左的交换填入B4、B5中,结果如下

    B1:a b c B2:d e f B3:g h i

         d e f      g h i      a b c

         g h i      a b c      d e f

    B4:c g b B5:0 0 0 B6:0 0 0

         f d e      0 0 0      0 0 0

         i g h      0 0 0      0 0 0

    B7:b c a B8:0 0 0 B9:0 0 0

         e f d      0 0 0      0 0 0

         h i g      0 0 0      0 0 0

这样呢因为本身左上角的九宫格就不会有重复的数字出现,则填好的其他九宫格也不会有重复的数字出现。且每一行每一列都由前一行变得,也做到了行、列中不会有重复的数字。

  • 第三步

    最后呢,我们将B2的列进行从右到左的交换,依次填入B5、B8中,将B3的列进行从右到左的交换,依次填入B6、B9中得到如下

    B1:a b c B2:d e f B3:g h i

         d e f      g h i      a b c

         g h i      a b c      d e f

    B4:c g b B5:f d e B6:i g h

         f d e      i g h      c a b

         i g h      c d b      f d e

    B7:b c a B8:e f d B9h i g

         e f d     h i g     b c a

         h i g     b c a     e f d

可以看出这是一个合乎规定的数独,接下来就是代码了,给自己加油

sudoku--设想的更多相关文章

  1. Sudoku Generator

    Sudoku 算法 标签(空格分隔): 软工实践 设想:通过第一行,来生成2, 3行的排列,再通过1 - 3 生成4 - 6排列. 2 3 行的生成由上一行生成 公式为$grid[i][j] = gr ...

  2. 关于Hadoop用户体系的设想(胡思乱想)

    关于Hadoop的用户体系设计设想 Hadoop并没有一个完整的用户体系,其权限控制的对象,主要是Linux的其它用户(即非安装Hadoop的用户),控制方式也和Linux的文件权限很像,目前权限控制 ...

  3. Leetcode 笔记 36 - Sudoku Solver

    题目链接:Sudoku Solver | LeetCode OJ Write a program to solve a Sudoku puzzle by filling the empty cells ...

  4. [LeetCode] Sudoku Solver 求解数独

    Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by th ...

  5. [LeetCode] Valid Sudoku 验证数独

    Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...

  6. LeetCode 36 Valid Sudoku

    Problem: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board ...

  7. 【leetcode】Valid Sudoku

    题目简述: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board cou ...

  8. ACM : POJ 2676 SudoKu DFS - 数独

    SudoKu Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu POJ 2676 Descr ...

  9. ACM: ICPC/CCPC Sudoku DFS - 数独

    Sudoku Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/65535K (Java/Other) Total Submis ...

  10. Leetcode: Sudoku Solver

    July 19, 2015 Problem statement: Write a program to solve a Sudoku puzzle by filling the empty cells ...

随机推荐

  1. 截屏工具 HyperSnap

    听说Tencent开发了1款截屏工具,叫"snip".确实字体效果不错,但是丫只有for mac的,不知道脑子里怎么想的,该不是直接买了第三方的然后冠了个名儿吧. 那么Windows有没有类似的工具呢 ...

  2. ExecutorService的submit方法使用

    在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动.调度.管理线程的一大堆API了.在Java5以后,通过Executor来启动线程比用Thread的start()更好.在新特征中 ...

  3. 移动端表层div滑动,导致底层body滑动(touchmove的阻止)

    body很长,可以滑动,body头部有一个模拟下拉的选择框,下拉选择有滚动轴 我给body一个overflow:hidden和高度是没有用的.手机网站上背景还是可以滑动,然后我给body一个touch ...

  4. mongodb相关 (population)

    记录Mongodb的populate Mongodb是文档型数据库,不存在像关系型数据库一样的外键设置,但通过Mongodb中的populate函数可以模拟关系型数据库的外键连接后的查询功能. 文档型 ...

  5. html4与html5的区别及html5的一些新特性

    区别 1.html5语法的改变 HTML5简化了很多细微的语法,例如: 1.1doctype的声明; html4: <!DOCTYPE HTML PUBLIC "-//W3C//DTD ...

  6. Windows10系统下,彻底删除卸载MySQL

    本文介绍,在Windows10系统下,如何彻底删除卸载MySQL... 1>停止MySQL服务开始->所有应用->Windows管理工具->服务,将MySQL服务停止.2> ...

  7. Git使用教程及常用命令大全

     一.git命令名词解释1.添加/跟踪/暂存:添加到本地索引       git add 文件名2.提交:提交到本地仓库       git commit -m '注释'3.推送:将提交到本地仓库的所 ...

  8. WeQuant交易策略—网格交易

    网格交易策略(Grid Trading) 策略介绍 网格策略本质上是一种低吸高抛的策略.标的物价格越低,吸纳的头寸越多:标的物价格越高,卖出的头寸越多.网格策略巧妙地借鉴了日常生活中渔翁撒网扑鱼的思路 ...

  9. php sql uuid 32位

    最近表中id需要用到此值来作为唯一主键 其含义是通用唯一识别码.具体好处及应用可百度百科,链接给你https://baike.baidu.com/item/UUID/5921266?fr=aladdi ...

  10. HTML 输入类型

    HTML 输入类型 输入类型 本章描述 <input> 元素的输入类型. 输入类型:text <input type="text"> 定义供文本输入的单行输 ...