• Sudoku Generator


    Sudoku 算法

    标签(空格分隔): 软工实践


    设想:通过第一行,来生成2, 3行的排列,再通过1 - 3 生成4 - 6排列。
    2 3 行的生成由上一行生成
    公式为$grid[i][j] = grid[i][(j + 3)%9] $
    即第二行由第一行向右平移3个位置,第三行由第一行向右平移6个位置。
    这样前三行满足:每一行都有1-9,前3个3*3的方块也都有1-9。
    例如:

    line1: 5 1 2 3 4 6 7 8 9
    line2: 3 4 6 7 8 9 5 1 2
    line3: 7 8 9 5 1 2 3 4 6
    

    将1 - 3行按顺序分成 3*3的方块

    s1: 5 1 2  s2: 3 4 6  s3: 7 8 9
        3 4 6      7 8 9      5 1 2
        7 8 9      5 1 2      3 4 6
    

    第4 - 9行分别由s1-s3列变换得到
    公式为(grid[i][j] = grid[i-3][j\%3==1?j+2:j-1])
    经过变换后

    s4: 2 5 1  s5: 6 3 4  s6: 9 7 8
        6 3 4      9 7 8      2 5 1
        9 7 8      2 5 1      6 3 4
    s7: 1 2 5  s8: 4 6 3  s9: 8 9 7
        4 6 3      8 9 7      1 2 5
        8 9 7      1 2 5      4 6 3
    

    最后得到的grid是:

    5 1 2   3 4 6   7 8 9
    3 4 6   7 8 9   5 1 2
    7 8 9   5 1 2   3 4 6
    
    2 5 1   6 3 4   9 7 8
    6 3 4   9 7 8   2 5 1 
    9 7 8   2 5 1   6 3 4
    
    1 2 5   4 6 3   8 9 7
    4 6 3   8 9 7   1 2 5
    8 9 7   1 2 5   4 6 3
    

    通过4 - 6行的行排列组合&7 - 9行的行排列组合可以组成

    [A_3^3*A_3^3 = 36 ]

    [36*8! >= 1e^6 ]

  • 相关阅读:
    mycat安装
    docker注册&打包
    docker的使用场景和背景了解
    解析nohup java -jar xxx &
    透明度百分比和十六进制对应关系
    android get cpu rate
    Cordova插件开发
    VectorDrawable在Android中的配置
    APK反编译后添加日志
    apk重新签名
  • 原文地址:https://www.cnblogs.com/chs97/p/7483586.html
Copyright © 2020-2023  润新知