递归回溯生成和解决数独问题c/c++
数独
程序地址https://github.com/papicheng/blog/tree/master/%E6%95%B0%E7%8B%AC
一、游戏规则介绍:
数独是源自18世纪瑞士的一种数学游戏。是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3*3)内的数字均含1-9,不重复。
- 程序介绍:
- 数独生成程序(sudokuGenerate.cpp)
生成数独的算法思想:回溯法,递归实现深度优先搜索
函数简介:
- void randomFirstRow(char a0[], int n) /*随机生成第一行*/
- int Digit(char a[][COL], int i, int j)/*递归填充一个数字*/
- void createSudoku(char a[][COL])/*封装后的数独生成函数*/
- void createStartinggrid(const char a[][COL], char b[][COL], int numDigits)/*随机生成初盘*/
- int checkSudoku(const char a[][COL])/*按规则检查函数*/
- void printToFile(const char a[][COL], const char filename[])/*打印数独数组到文件*/
- void createSudokuToFile(void)/*批量生成数独初盘到文件中*/
主要变量:
#define MAXNUM 1000 /*数独游戏个数*/
#define SEED 20171212 /*用于随机数生成的种子*/
- 模拟学生端程序(sudokuStudentEnd.cpp)
解决数独问题的算法思想:与生成数独一致。
函数简介:
- int checkSudoku(const char a[][COL])/*按规则检查函数*/
- void printSudoku(const char a[][COL])/*打印数独到屏幕*/
- void readFromFile(char a[][COL],
const char filename[])/*从一个文件中读取数独*/
- int Solve(const char a[][COL],char b[][COL], int i,
int j)/*递归解决数独*/
- void solveSudoku(const char a[][COL],
char b[][COL])/*封装后的解数独函数*/
- 主函数负责遍历读取sudoku目录中的全部数独初盘,调用解数独函数,并计算时间,检查解的正确性,如果出错立刻输出错误提示并结束程序。最后输出求解全部数独问题花费的时间。
主要变量:
#define MAXNUM 1000 /*数独游戏个数,初始阶段可以设置成100,即 只做前100道题*/
- 待解决程序(sudokuStudentEnd_toBeSolved.cpp)
内容与模拟学生端程序基本一致,主要做了以下修改:
- 删除readFromFile函数的函数体,考察学生的文件读写能力;
- 删除Solve函数;
- 删除solveSudoku函数的函数体。其中:
- 参数const char a[][COL]表示初盘二维数组;
- 参数char b[][COL]表示解的二维数组。
- 任务要求:
- 老师利用sudokuGenerate.cpp生成包含1000道数独问题的sudoku文件夹;
- 将sudoku文件夹和sudokuStudentEnd_toBeSolved.cpp发布给学生(sudoku文件夹和sudokuStudentEnd_toBeSolved.cpp必须在同一目录下);
- 学生需要补充readFromFile函数和Solve函数,完成1000道数独问题的求解。
- 并且,程序的运行时间必须低于模拟学生端程序的时间(200s以内)。
- 评分标准:
- 正确解决数独问题,并且时间控制在200s以内可以得到满分。
- 用时最短的前三名学生获得额外的分数奖励。
程序运行效果图
注:生成的数独会以TXT文件格式保存,解算数独的时候需要从txt文件中读取数据。
程序地址https://github.com/papicheng/blog/tree/master/%E6%95%B0%E7%8B%AC
如果对您有帮助
递归回溯生成和解决数独问题c/c++的更多相关文章
- POJ2676,HDU4069解决数独的两种实现:DFS、DLX
搜索实现:解决数独有两种思考策略,一种是枚举当前格能填的数字的种数,这里有一优化策略就是先搜索能填入种数小的格子:另一种是考虑处理某一行(列.宫)时,对于某一个没用过的数字,若该行(列.宫)只有一个可 ...
- LeetCode || 递归 / 回溯
呜呜呜 递归好不想写qwq 求“所有情况”这种就递归 17. Letter Combinations of a Phone Number 题意:在九宫格上按数字,输出所有可能的字母组合 Input: ...
- 20191030-带返回值的回溯算法Leetcode解数独
题目描述 编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔 ...
- 【原创】视频+文字:详解VBA解决数独问题
[说在前面]: 之前,我在微信朋友圈看到一个同事发了一个状态,说的是她在家辅导孩子做作业,一个数独的题目,好像没有做出来.我看了下,我也做不出来,后来仔细想了下,花了两个多小时时间,用Python编了 ...
- SQL Server中公用表表达式 CTE 递归的生成帮助数据,以及递归的典型应用
本文出处:http://www.cnblogs.com/wy123/p/5960825.html 我们在做开发的时候,有时候会需要一些帮助数据,必须需要连续的数字,连续间隔的时间点,连续的季度日期等等 ...
- 公用表表达式(CTE)递归的生成帮助数据
本文的作者辛苦了,版权问题特声明本文出处:http://www.cnblogs.com/wy123/p/5960825.html 工作有时候会需要一些帮助数据,必须需要连续的数字,连续间隔的时间点,连 ...
- 递归回溯 UVa140 Bandwidth宽带
本题题意:寻找一个排列,在此排序中,带宽的长度最小(带宽是指:任意一点v与其距离最远的且与v有边相连的顶点与v的距离的最大值),若有多个,按照字典序输出最小的哪一个. 解题思路: 方法一:由于题目说结 ...
- SQL点点滴滴_公用表表达式(CTE)递归的生成帮助数据
本文的作者辛苦了,版权问题特声明本文出处:http://www.cnblogs.com/wy123/p/5960825.html 工作有时候会需要一些帮助数据,必须需要连续的数字,连续间隔的时间点,连 ...
- php 递归的生成目录函数
/** * 递归的生成目录 * @param str $dir 必须是目录 */ function mkdirs($dir) { return is_dir($dir) ?: mkdirs(dirna ...
随机推荐
- SVN_01概念
客戶端TortoiseSVN 服务器端VIsualSVN SVN是Apache Subversion的缩写,是一个开放源代码的版本控制系. 这些数据放置在一个中央资料库(repository)中.这 ...
- google mock C++单元测试框架
转:google mock C++单元测试框架 2012-03-12 09:33:59 http://blog.chinaunix.net/uid-25748718-id-3129590.html G ...
- 在我的电脑中删除wps云文档图标
在我的电脑中删除wps云文档图标 右键点击win10左下角选择运行,输入regedit打开注册表后,找到以下注册表路径: HKEY_CURRENT_USER\Software\Microsoft\Wi ...
- Windows cmd操作文件夹
ir // 列出目录下所有文件夹 rd dirname // 删除dirname文件夹(空文件夹) rd /s/q dirname // 删除dirname文件夹(非空)
- 【转载】 C#中使用Sum方法对List集合进行求和操作
在C#的List操作中,有时候我们需要对List集合对象的某个属性进行求和操作,此时可以使用Lambda表达式中的Sum方法来快速实现此求和操作,使用Sum方法可使代码简洁易读,并且省去写for循环或 ...
- table固定宽度与自动宽度
table-layout:auto(创建的table默认是此布局模式): 对table和td.th指定的宽度无效,浏览器会计算所有单元格的内容宽度才能得出一列宽度 如果想对单元格的内容自动折行需使用w ...
- CSS和LESS
1.CSS 层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言.CSS ...
- RT-Thread--线程间通信
线程中通信 在裸机编程中,经常会使用全局变量进行功能间的通信,如某些功能可能由于一些操作而改变全局变量的值,另一个功能对此全局变量进行读取,根据读取到的全局变量值执行相应的动作,达到通信协作的目的: ...
- JDBC课程5--利用反射及JDBC元数据(ResultSetMetaData)编写通用的查询方法
/**-利用反射及JDBC元数据编写通用的查询方法 * 1.先利用SQl语句进行查询,得到结果集--> * 2.查找到结果集的别名:id--> * 3.利用反射创建实体类的对象,创建aut ...
- Robot Framework--pybot命令
1.执行整个项目下的所有用例: pybot 项目路径.例如: pybot D:\robotPS:robot项目里面所有用例 2.执行某个suit中的所有用例: pybot 项目路径\suit文件名称. ...