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 ... 
随机推荐
- Handlebars模板引擎渲染页面
			基本使用 js: var testTpl = Handlebars.compile($('#test').html()); //模板 var arr = [1,2,3] //数据 $('#box'). ... 
- Json 查看Json的插件
			# 写写写写写,每个人有每个人写东西的方式,这些都是好的方式.需要感谢的人有几个,对我的成长有启发,所以我也会把能够想到.接触到的东西告诉team里面的人.新人,然后这些人又可以把这些东西传递给下一波 ... 
- 初识webview
			一.什么是webview 原生APP开发中有一个webview的组件(Android中是webview,iOS7以下有UIWebview,7以上有WKWebview),这个组件可以加载Html文件 ... 
- JS正则密码复杂度校验之:至少有多种字符中的其中几种
			概述 续接上文的密码校验要求: 这个需求有两个难点,一,是如何使用正则匹配所有半角英文标点符号,二,是如何验证密码段中在要求的四种(大写字母,小写字母,数字,标点符号)类型中至少存在三种. 第一个难点 ... 
- exit()与_exit()的区别(转)
			http://blog.csdn.net/lwj103862095/article/details/8640037 从图中可以看出,_exit 函数的作用是:直接使进程停止运行,清除其使用的内存空间, ... 
- fs模块(二)
			1. renameSync 01. 重命名 02. 移动文件夹,相当于剪切作用 var fs = require('fs'); // 01 文件重命名 var renameFile = (oldFil ... 
- 非极大值抑制(Non-Maximum Suppression,NMS)
			概述 非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素,可以理解为局部最大搜索.这个局部代表的是一个邻域,邻域有两个参数可变,一是邻域的维数,二 ... 
- 一周中的后两天 笔记(网路基础 Python基础)
			网络基础 (统一的协议) 一, 计算机之间通过物理介质(网络设备)连接在一起 二, 计算机之间基于网络协议通信 tcp/ip五层 应用层: 传输层:tcp/udp协议 找到对应的软件 一个 ... 
- IDE UltraEdit 图文激活+安装教程
			IDE UltraEdit 安装+激活图文.. ---------------- ---------------- ---------------- ---------------- -------- ... 
- Yii2 报错Getting unknown property: app\models\Product::
			解决方法:查看是否存在 "$a->$abc"的写法,应改成$a->abc 
