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行的行排列组合可以组成
\]
\]
Sudoku Generator的更多相关文章
- 第二次作业——个人项目实战(Sudoku)
Github:Sudoku 项目相关要求 利用程序随机构造出N个已解答的数独棋盘 . 输入 数独棋盘题目个数N 输出 随机生成N个 不重复 的 已解答完毕的 数独棋盘,并输出到sudoku.txt中, ...
- 17秋 软件工程 第二次作业 sudoku
2017年秋季 软件工程 作业2:个人项目 sudoku Github Project Github Project at Wasdns/sudoku. PSP Table PSP2.1 Person ...
- 软工实践作业2:个人项目实战之Sudoku
Github:Sudoku 项目相关要求 项目需求 利用程序随机构造出N个已解答的数独棋盘 . 输入 数独棋盘题目个数N(0<N<=1000000). 输出 随机生成N个不重复的已解答完毕 ...
- 关于条件约束问题的无偏差统计——一个偏差控制型生成器(Unbiased Statistics of a Constraint Satisfaction Problem – a Controlled-Bias Generator——by Denis Berthier)
论文地址:https://hal.archives-ouvertes.fr/hal-00641955 Unbiased Statistics of a Constraint Satisfaction ...
- EasyMesh - A Two-Dimensional Quality Mesh Generator
EasyMesh - A Two-Dimensional Quality Mesh Generator eryar@163.com Abstract. EasyMesh is developed by ...
- 轻量级“集合”迭代器-Generator
Generator是PHP 5.5加入的新语言特性.但是,它似乎并没有被很多PHP开发者广泛采用.因此,在我们了解PHP 7对Generator的改进之前,我们先通过一个简单却显而易见的例子来了解下G ...
- .NET平台开源项目速览(18)C#平台JSON实体类生成器JSON C# Class Generator
去年,我在一篇文章用原始方法解析复杂字符串,json一定要用JsonMapper么?中介绍了简单的JSON解析的问题,那种方法在当时的环境是非常方便的,因为不需要生成实体类,结构很容易解析.但随着业务 ...
- 深入解析js异步编程利器Generator
我们在编写Nodejs程序时,经常会用到回调函数,在一个操作执行完成之后对返回的数据进行处理,我简单的理解它为异步编程. 如果操作很多,那么回调的嵌套就会必不可少,那么如果操作非常多,那么回调的嵌套就 ...
- Leetcode 笔记 36 - Sudoku Solver
题目链接:Sudoku Solver | LeetCode OJ Write a program to solve a Sudoku puzzle by filling the empty cells ...
随机推荐
- 设计模式的征途—19.命令(Command)模式
在生活中,我们装修新房的最后几道工序之一是安装插座和开关,通过开关可以控制一些电器的打开和关闭,例如电灯或换气扇.在购买开关时,用户并不知道它将来到底用于控制什么电器,也就是说,开关与电灯.换气扇并无 ...
- 【有意思的BUG】分享按钮 分享功能
[分享按钮]是一个常见的功能,你可以把看到的有意思的东西分享到自己的BLOG.朋友圈之类的地方. 但是,分享出去的文本(也可以包含图片)在每个目标网站上面的格式并不是统一的,所以就存在了美感的三六九等 ...
- 使用 ESXi 虚拟化 Ryzen 1700
最近开发的一个项目,需要多台机器支持,PC + 各种虚拟机,整得很乱,一怒之下,购买一台Ryzen 1700 + 32GB机器自行搭建服务器.经历两天时间,不停的踩坑,终于完成: Ryzen 1700 ...
- Qt将窗体变为顶层窗体
//重载resizeEvent和moveEvent两个函数,以保证窗体大小和位置改变后能时刻记住其位置 QRect curGemRect = mpWindow->geometry(); //激活 ...
- 【leetcode】92. Reverse Linked List II
Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1-> ...
- 第48篇 说说.Net与Java中的字符串
原文地址:http://blog.laofu.online/2017/08/18/String-In-dotnet-Java/ Java字符串碰到的问题 在写Java程序碰到一个问题,而正是这个问题引 ...
- EXT.NET复杂布局(二)——报表
前面提到过工作台(<EXT.NET复杂布局(一)--工作台>)了,不知道各位看过之后有什么感想.这次就介绍介绍使用EXT.NET画几个报表. 看图写作从小学就开始了,如图: 图一 图二 图 ...
- .net core 2.0学习笔记(四):迁移.net framework 工程到.net core
在迁移.net core的过程中,第一步就是要把.net framework 工程的目标框架改为.net core2.0,但是官网却没有提供转换工具,需要我们自己动手完成了..net framewor ...
- java微信公众平台开发
微信公众平台的开发,总体说来也是简单的,就是先大概看下微信公众平台接口文档. 请先大概浏览一下API手册,我们会发现,推送给微信服务器的数据有两种:xml的形式,和json的形式. 那么什么时候是XM ...
- oracle多表连接查询竟然还有这种操作
仔细观察上面几个图,比较下 oracle数据库中的+操作符竟然可以替换left join 和right join sql server暂时没用到过