数独游戏-C语言实现
目标
写一个数独游戏,有以下功能:
1:能随机产生题目并给出答案。
2:求解输入的题目并输出答案。
实现说明
参照百度百科等资料可以知道求解数独的主要算法是:1.通过行、列和宫格确定可填数字。2.所有可行数字逐一填入得到结果。本程序求解数独部分也采用这样的算法。而生成题目的算法是:
- 随机产生一个长度为9的一维数组,元素是随机产生的1到9的不同数字。
比如为root = [1, 4, 3, 5, 6 ,7, 8 ,9, 2].
- 先获得一个填满的九宫格accord。
- 假如九宫格accord的第一行为[6, 4, 5, 7, 3, 9, 8, 1, 2], 则可获得的九宫格squa的第一行第一列元素这样产生:看accord对应元素为6,则看root中6后一位的数为7,则所求数字为7。以此类推。
- 根据难度随机去除一定数量的空格则得到了随机产生的数独题目。
下面介绍本程序的主要难点和创新点:
-
解数独的递归法。首先要定义一个检查函数judge用于判断某个数字在某个位置是否合适,进而根据找到的递归头即至最后一个位置后,分是否为0两种情况,否则,继续递归。
-
随机产生1到9之间的数。由于编译器自带函数rand会出现元素不变的确点,所以使用系统时间为种子,并引入全局变量index,使得时间差加大,避免固定不变。
-
定义各种函数简化程序。本程序定义了fprintf用于打印九宫格,定义reRank来获取元素在数组中位置等,简化了程序。
结果
下面是分别选择1(产生题目)和2(计算数独)后的结果图:
代码:
语言: C
//期末实验报告-简单的数独计算器
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
long index = 0; //全局变量index是保证每次产生的随机元素随机性
void main()
{
void solve(int squa[9][9], int num);
void fprintf