zoukankan      html  css  js  c++  java
  • sudoku--设想

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

    • 第一步

    首先将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

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

  • 相关阅读:
    【总结】进程和线程的区别
    为什么要求数据链路层帧的长度必须限制在一定范围内?
    常用正交表
    用正交表设计测试用例
    测试中的杀虫剂困境
    作品集-1:淘宝支付宝登陆框
    # 36氪开放日 • 杭州 • 11月10日 # 谈谈参会感受
    《在你身边,为你设计》读后感
    抱怨的背后
    更快的方式实现PHP数组去重
  • 原文地址:https://www.cnblogs.com/SwordX/p/7486900.html
Copyright © 2011-2022 走看看