递归回溯生成和解决数独问题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++相关推荐
- 数独题的生成与解决方法
数独题的生成与解决方法 参考文章: (1)数独题的生成与解决方法 (2)https://www.cnblogs.com/trav/p/10197907.html (3)https://www.code ...
- 递归回溯法求数独全部解
项目介绍 QT5做的数独求解程序,可以判断数独解的个数(如果非唯一解). 运行截图 源码说明 使用MSVC + QT5平台,故* .cpp和* .h文件均采用UTF8 + BOM编码.如果切换到Min ...
- java回溯算法解决数独_js回溯算法解决数独问题
直接上代码 代码里面注释很清晰 传说中的最难数组大概是在20ms左右解决 /** * 数独算法 */ class Sudoku { constructor({ display = false, sud ...
- 面试题目_经典面试题目「回溯算法」解数独
解数独,理解二维递归是关键! 通知:我将公众号文章和学习相关的资料整理到了Github :https://github.com/youngyangyang04/leetcode-master,方便大家 ...
- 软工个人项目之生成和求解数独
软工个人项目之生成和求解数独 在这次完成个人项目的过程中,我第一次尝试了写csdn博客,用vs进行性能分析,在vs里面写单元测试,这次收获了很多.虽然还有很多需要改进的地方,但我会做得越来越好的~ 1 ...
- 回溯法和分支限界法解决旅行商问题
实验三 旅行商问题 一. 实验内容 二.实验目的 三. 算法描述 1.回溯算法描述: 2.分支限界法算法描述: 四. 算法实现 1.数据结构及函数说明 (1) 回溯法求解TSP问题 (2) 分支界限求 ...
- 递归/回溯:subsets求子集
前言 回溯法又称为试探法,但当探索到某一步时,发现原先选择达不到 目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法. 已知一组数(其中无重复元素),求这组数可以组成的所有子集. 结果中不可 ...
- 十二、八皇后问题(递归回溯)
一.八皇后问题介绍 (本次使用回溯算法解决,之后会用贪心算法优化) 在 8×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行. 同一列或同一斜线上,问有多少种摆法(9 ...
- POJ2676,HDU4069解决数独的两种实现:DFS、DLX
搜索实现:解决数独有两种思考策略,一种是枚举当前格能填的数字的种数,这里有一优化策略就是先搜索能填入种数小的格子:另一种是考虑处理某一行(列.宫)时,对于某一个没用过的数字,若该行(列.宫)只有一个可 ...
最新文章
- java分割字符串_Java中分割字符串
- jzoj5363-[NOIP2017提高A组模拟9.14]生命之树【启发式合并,Trie】
- 写lua时需要注意的地方
- 双十一丝般顺滑体验背后:阿里云洛神网络虚拟化系统揭秘
- 简单粗暴 我再送一波教程资料,Vue、大数据、AI都有
- mysql innodb和myisam区别_MySQL?存储引擎简介
- Qt使用QPainter绘图的缩放问题
- 微型计算机pentium或celeron,计算机综合测试答案.doc
- Bzoj 2683: 简单题(CDQ分治)
- 一款严肃而又活泼的少儿学数学软件截图
- java旅游管理系统(带文档
- 2020五一建模:C题 饲料混合加工问题 题解
- excel如何比对两列数据是否相同
- 机器人操作系统二(ROS2)- 修行 Taoism
- 无法在驱动器0分区上安装windows解决方法
- 淘宝信用等级|淘宝买家信用等级|淘宝卖家信用等级(图片介绍更清晰)
- 构建新型现代化智慧博物馆之物联网环境监控方案
- 开发手机APP做UI设计,这5个UI错误会置你的APP于死地!
- informatica 许可_安装Informatica9.5.1
- linux编译input驱动,Linux驱动开发之input子系统
热门文章
- 片上总线Wishbone 学习—— 转载请注明出处:http://blog.csdn.net/ce123
- 罗升阳 android系统源代码情景分析,Android系统源代码情景分析
- 高红梅:第三章 第三节 从探寻自我到生命共同体的身份认同
- Peekaboo——代码规范、冲刺任务与计划
- 一个网工的十年奋斗史 - 工作篇
- android 图片字体涂鸦,Android 编辑图片 Canvas画图,涂鸦,马赛克等(一)
- Python操作网页
- linux中错误无法解析域名无法下载,Linux无法解析域名的解决办法
- AutoSAR系列讲解(入门篇)5.2-描述文件
- 韩国职业选手风格分析