Tag: 数独

随机数独游戏的算法设计 (Sudoku)

给定一个数独(Sudoku), 我们可以使用深度优先搜索算法(DFS), 迭代加深搜索算法(IDS)或广度优先搜索算法(BFS)来寻找可能的解. 反过来, 如果我们要设计一个算法来生成有效的数独, 我们需要澄清以下问题: 生成的数独(Sudoku)必须有可解状态吗? 是的 生成的数独(Sudoku)有多个解吗? 我们可以假设返回的Suduoku只有1个唯一解 生成的数独(Sudoku)的找解难度? 我们可以为此设置一个参数: 简单, 中等或困难 一共有6.671×10^21个有效的数独状态, 如果我们忽略旋转, 镜像状态等重复的状态, 这个数字就降到了5.4×10^9个状态. 我们可以随机生成一个由数字1-9填充的矩阵, 并检查它是否是有效的数独, 但这非常低效, 因为生成的矩阵极有可能不是有效的数独. 设计一个随机数独的算法 为了设计一个有效的算法, 生成一个随机的有效数独, 我们可以采用以下算法: 使用回溯(深度优先搜索)算法来生成一个具有随机性的有效完整数独. 例如, 我们可以随机选择数字, …

软件工程师面试技巧之 如何检查数独的有效性

前不久写的这个 软件工程师面试技巧 的系列, 朋友很喜欢, 所以我打算把我毕生所学(哈哈)整理整理分享于大家,望喜欢.另:我觉得:分享就是一种再学习的过程. 去年 Google 的面试题 – 打印消息 软件工程师面试技巧之 使用哈希表降复杂度 给定一个数独,我们要检查是否有效.一个有效的数独横的竖的都只出现1-9的数字各一次,并且9个小宫格里的数字也只出现1-9各一次. 你能快速的告诉我以下是否是个有效的数独么? 我们只需要检查给定的数独中已经填好的数字.最好的方法就是通过 C++中 STL 的 unordered_set (未排序的集合) 来保存已经出的数字.记得检查下一个9宫格或者行或列的时候清空集合便可. // https://justyy.com/archive/4998 class Solution { public: bool isValidSudoku(vector<vector<char>>& …