数独

程序地址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

如果对您有帮助

最新文章

  1. 工厂模式(Factory)
  2. 如何在一个页面后面随机跳转到多个链接地址Math.floor()和Math.random()
  3. 关于MySQL相关的查看显示信息:
  4. WebBench源码分析与心得
  5. Mysql 基础1
  6. javascript基础08
  7. (四)主控板改IP,升级app,boot,mac
  8. Objective-C和C++的区别
  9. qt之treeview例子
  10. sql对日期的处理,一个存储过程示例
  11. Gson解析复杂的Bean类实现Parcelable
  12. LVM学习
  13. linux普通帐号可以临时切换到root(添加用户到sudoers中)
  14. python3 fileinput模块
  15. Python 中的比较:is 与 ==
  16. 修改JDK版本配置
  17. libextobjc使用
  18. CS229 6.12 Neurons Networks from self-taught learning to deep network
  19. NBU 还原LINUX ORACLE RAC数据库(MIDDB)
  20. SQL那些事儿(十一)--ODBC,OLE-DB,ADO.NET区别[转]

热门文章

  1. [LOJ 6485]LJJ学二项式定理(单位根反演)
  2. Yii2 redis 使用方法
  3. linux之rename和mv的区别
  4. RabbitMQ消息队列入门(一)——RabbitMQ消息队列的安装(Windows环境下)
  5. 算法题:购买n个苹果,苹果6个一袋或者8个一袋,若想袋数最少,如何购买?
  6. 【js】字符串反转(倒序)的多种处理方式
  7. RuntimeWarning: DateTimeField AppToken.expire_date received a naive datetime (2019-05-16 16:54:01.144582) while time zone support is active. RuntimeWarning)
  8. 【fiddler】fiddler基础
  9. 一份数据分析学习清单.xls
  10. [TCP/IP][distributed] proxy protocol 是什么