数独

程序地址https://github.com/papicheng/blog/tree/master/%E6%95%B0%E7%8B%AC

一、游戏规则介绍:

数独是源自18世纪瑞士的一种数学游戏。是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3*3)内的数字均含1-9,不重复。

  • 程序介绍:
  1. 数独生成程序(sudokuGenerate.cpp)

生成数独的算法思想:回溯法,递归实现深度优先搜索

函数简介

  1. void randomFirstRow(char a0[], int n) /*随机生成第一行*/
  2. int Digit(char a[][COL], int i, int j)/*递归填充一个数字*/
  3. void createSudoku(char a[][COL])/*封装后的数独生成函数*/
  4. void createStartinggrid(const char a[][COL], char                   b[][COL], int numDigits)/*随机生成初盘*/
  5. int checkSudoku(const char a[][COL])/*按规则检查函数*/
  6. void printToFile(const char a[][COL], const char                            filename[])/*打印数独数组到文件*/
  7. void createSudokuToFile(void)/*批量生成数独初盘到文件中*/

主要变量

#define MAXNUM 1000   /*数独游戏个数*/

#define SEED 20171212 /*用于随机数生成的种子*/

  1. 模拟学生端程序(sudokuStudentEnd.cpp)

解决数独问题的算法思想:与生成数独一致。

函数简介

  1. int checkSudoku(const char a[][COL])/*按规则检查函数*/
  2. void printSudoku(const char a[][COL])/*打印数独到屏幕*/
  3. void readFromFile(char a[][COL],

const char filename[])/*从一个文件中读取数独*/

  1. int Solve(const char a[][COL],char b[][COL], int i,

int j)/*递归解决数独*/

  1. void solveSudoku(const char a[][COL],

char b[][COL])/*封装后的解数独函数*/

  1. 主函数负责遍历读取sudoku目录中的全部数独初盘,调用解数独函数,并计算时间,检查解的正确性,如果出错立刻输出错误提示并结束程序。最后输出求解全部数独问题花费的时间。

主要变量

#define MAXNUM 1000   /*数独游戏个数,初始阶段可以设置成100,即                      只做前100道题*/

  1. 待解决程序(sudokuStudentEnd_toBeSolved.cpp)

内容与模拟学生端程序基本一致,主要做了以下修改:

  1. 删除readFromFile函数的函数体,考察学生的文件读写能力;
  2. 删除Solve函数;
  3. 删除solveSudoku函数的函数体。其中:
    1. 参数const char a[][COL]表示初盘二维数组;
    2. 参数char b[][COL]表示解的二维数组。
  • 任务要求:
  1. 老师利用sudokuGenerate.cpp生成包含1000道数独问题的sudoku文件夹;
  2. 将sudoku文件夹和sudokuStudentEnd_toBeSolved.cpp发布给学生sudoku文件夹和sudokuStudentEnd_toBeSolved.cpp必须在同一目录下)
  3. 学生需要补充readFromFile函数和Solve函数,完成1000道数独问题的求解。
  4. 并且,程序的运行时间必须低于模拟学生端程序的时间(200s以内)。
  • 评分标准:
  1. 正确解决数独问题,并且时间控制在200s以内可以得到满分。
  2. 用时最短的前三名学生获得额外的分数奖励。

程序运行效果图

注:生成的数独会以TXT文件格式保存,解算数独的时候需要从txt文件中读取数据。

程序地址https://github.com/papicheng/blog/tree/master/%E6%95%B0%E7%8B%AC

如果对您有帮助,请打赏!谢谢!

递归回溯生成和解决数独问题c/c++相关推荐

  1. 数独题的生成与解决方法

    数独题的生成与解决方法 参考文章: (1)数独题的生成与解决方法 (2)https://www.cnblogs.com/trav/p/10197907.html (3)https://www.code ...

  2. 递归回溯法求数独全部解

    项目介绍 QT5做的数独求解程序,可以判断数独解的个数(如果非唯一解). 运行截图 源码说明 使用MSVC + QT5平台,故* .cpp和* .h文件均采用UTF8 + BOM编码.如果切换到Min ...

  3. java回溯算法解决数独_js回溯算法解决数独问题

    直接上代码 代码里面注释很清晰 传说中的最难数组大概是在20ms左右解决 /** * 数独算法 */ class Sudoku { constructor({ display = false, sud ...

  4. 面试题目_经典面试题目「回溯算法」解数独

    解数独,理解二维递归是关键! 通知:我将公众号文章和学习相关的资料整理到了Github :https://github.com/youngyangyang04/leetcode-master,方便大家 ...

  5. 软工个人项目之生成和求解数独

    软工个人项目之生成和求解数独 在这次完成个人项目的过程中,我第一次尝试了写csdn博客,用vs进行性能分析,在vs里面写单元测试,这次收获了很多.虽然还有很多需要改进的地方,但我会做得越来越好的~ 1 ...

  6. 回溯法和分支限界法解决旅行商问题

    实验三 旅行商问题 一. 实验内容 二.实验目的 三. 算法描述 1.回溯算法描述: 2.分支限界法算法描述: 四. 算法实现 1.数据结构及函数说明 (1) 回溯法求解TSP问题 (2) 分支界限求 ...

  7. 递归/回溯:subsets求子集

    前言 回溯法又称为试探法,但当探索到某一步时,发现原先选择达不到 目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法. 已知一组数(其中无重复元素),求这组数可以组成的所有子集. 结果中不可 ...

  8. 十二、八皇后问题(递归回溯)

    一.八皇后问题介绍 (本次使用回溯算法解决,之后会用贪心算法优化) 在 8×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行. 同一列或同一斜线上,问有多少种摆法(9 ...

  9. POJ2676,HDU4069解决数独的两种实现:DFS、DLX

    搜索实现:解决数独有两种思考策略,一种是枚举当前格能填的数字的种数,这里有一优化策略就是先搜索能填入种数小的格子:另一种是考虑处理某一行(列.宫)时,对于某一个没用过的数字,若该行(列.宫)只有一个可 ...

最新文章

  1. java分割字符串_Java中分割字符串
  2. jzoj5363-[NOIP2017提高A组模拟9.14]生命之树【启发式合并,Trie】
  3. 写lua时需要注意的地方
  4. 双十一丝般顺滑体验背后:阿里云洛神网络虚拟化系统揭秘
  5. 简单粗暴 我再送一波教程资料,Vue、大数据、AI都有
  6. mysql innodb和myisam区别_MySQL?存储引擎简介
  7. Qt使用QPainter绘图的缩放问题
  8. 微型计算机pentium或celeron,计算机综合测试答案.doc
  9. Bzoj 2683: 简单题(CDQ分治)
  10. 一款严肃而又活泼的少儿学数学软件截图
  11. java旅游管理系统(带文档
  12. 2020五一建模:C题 饲料混合加工问题 题解
  13. excel如何比对两列数据是否相同
  14. 机器人操作系统二(ROS2)- 修行 Taoism
  15. 无法在驱动器0分区上安装windows解决方法
  16. 淘宝信用等级|淘宝买家信用等级|淘宝卖家信用等级(图片介绍更清晰)
  17. 构建新型现代化智慧博物馆之物联网环境监控方案
  18. 开发手机APP做UI设计,这5个UI错误会置你的APP于死地!
  19. informatica 许可_安装Informatica9.5.1
  20. linux编译input驱动,Linux驱动开发之input子系统

热门文章

  1. 片上总线Wishbone 学习—— 转载请注明出处:http://blog.csdn.net/ce123
  2. 罗升阳 android系统源代码情景分析,Android系统源代码情景分析
  3. 高红梅:第三章 第三节 从探寻自我到生命共同体的身份认同
  4. Peekaboo——代码规范、冲刺任务与计划
  5. 一个网工的十年奋斗史 - 工作篇
  6. android 图片字体涂鸦,Android 编辑图片 Canvas画图,涂鸦,马赛克等(一)
  7. Python操作网页
  8. linux中错误无法解析域名无法下载,Linux无法解析域名的解决办法
  9. AutoSAR系列讲解(入门篇)5.2-描述文件
  10. 韩国职业选手风格分析