数独

程序地址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. POJ2676,HDU4069解决数独的两种实现:DFS、DLX

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

  2. LeetCode || 递归 / 回溯

    呜呜呜 递归好不想写qwq 求“所有情况”这种就递归 17. Letter Combinations of a Phone Number 题意:在九宫格上按数字,输出所有可能的字母组合 Input: ...

  3. 20191030-带返回值的回溯算法Leetcode解数独

    题目描述 编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔 ...

  4. 【原创】视频+文字:详解VBA解决数独问题

    [说在前面]: 之前,我在微信朋友圈看到一个同事发了一个状态,说的是她在家辅导孩子做作业,一个数独的题目,好像没有做出来.我看了下,我也做不出来,后来仔细想了下,花了两个多小时时间,用Python编了 ...

  5. SQL Server中公用表表达式 CTE 递归的生成帮助数据,以及递归的典型应用

    本文出处:http://www.cnblogs.com/wy123/p/5960825.html 我们在做开发的时候,有时候会需要一些帮助数据,必须需要连续的数字,连续间隔的时间点,连续的季度日期等等 ...

  6. 公用表表达式(CTE)递归的生成帮助数据

    本文的作者辛苦了,版权问题特声明本文出处:http://www.cnblogs.com/wy123/p/5960825.html 工作有时候会需要一些帮助数据,必须需要连续的数字,连续间隔的时间点,连 ...

  7. 递归回溯 UVa140 Bandwidth宽带

    本题题意:寻找一个排列,在此排序中,带宽的长度最小(带宽是指:任意一点v与其距离最远的且与v有边相连的顶点与v的距离的最大值),若有多个,按照字典序输出最小的哪一个. 解题思路: 方法一:由于题目说结 ...

  8. SQL点点滴滴_公用表表达式(CTE)递归的生成帮助数据

    本文的作者辛苦了,版权问题特声明本文出处:http://www.cnblogs.com/wy123/p/5960825.html 工作有时候会需要一些帮助数据,必须需要连续的数字,连续间隔的时间点,连 ...

  9. php 递归的生成目录函数

    /** * 递归的生成目录 * @param str $dir 必须是目录 */ function mkdirs($dir) { return is_dir($dir) ?: mkdirs(dirna ...

随机推荐

  1. SQL高级教程

    一.top子句 top子句用于规定要返回的记录的数目 并非所有数据库系统都支持top子句 # sqlserver SELECT TOP number|percent column_name(s) FR ...

  2. Web Scraper 翻页——控制链接批量抓取数据(Web Scraper 高级用法)| 简易数据分析 05

    这是简易数据分析系列的第 5 篇文章. 上篇文章我们爬取了豆瓣电影 TOP250 前 25 个电影的数据,今天我们就要在原来的 Web Scraper 配置上做一些小改动,让爬虫把 250 条电影数据 ...

  3. 如果只有1小时学Python,看这篇就够了

    大家好,我是大鹏,城市数据团联合发起人,致力于Python数据分析.数据可视化的应用与教学. 和很多同学接触过程中,我发现自学Python数据分析的一个难点是资料繁多,过于复杂.大部分网上的资料总是从 ...

  4. ABAP-信息结构S901/S902程序问题

    1.问题 信息结构请求传入正式环境后,RMCX0070/RMCX0071程序执行DUMP,无法调用程序SAPFMCBF中的子FORM程序 MCB1_901 或是 MCB2_901 . 2.经查SAPF ...

  5. CentOS7.X+LAMP环境下安装zabbix4.X

    1.安装zabbix仓库 rpm -ivh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-1.el7.noar ...

  6. Python之路【第十篇】Python操作Memcache、Redis、RabbitMQ、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  7. linux网络编程之system v信号量(二)

    今天迎来元旦假期的最后一天了,过得好快~昨天跟小伙伴们在军都滑雪陪儿爽,虽说上了两回中级道都摔得异常的惨烈,但是在初级道上学习"s"转弯还是有一些小心得,可以在要往高手迈进的前提, ...

  8. css定位篇

    1.浮动的特性: 1.浮动的元素脱标 2.浮动的元素互相贴靠 3.浮动的元素有“字围”效果 4.收缩的效果 前提是标准文档流,margin的垂直方向会出现塌陷问题. 如果盒子居中:margin:0 a ...

  9. 神经网络(1)--Non-linear hypotheses,为什么我们要学习神经网络这种算法来处理non-linear hypotheses

    神经网络(1)--No-linear hypotheses 为什么我们已经有了linear regression与logistic regression算法还要来学习神经网络这个另外的算法呢,让我们来 ...

  10. css 学习笔记 菜鸟

    1 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明: 选择器通常是您需要改变样式的 HTML 元素. 每条声明由一个属性和一个值组成.每个属性有一个值.属性和值被冒号分开.CSS声明总是 ...