数独游戏-C语言实现

本文介绍了如何使用C语言实现数独游戏,包括随机生成题目和求解数独的算法。程序采用递归法解数独,并通过设置随机种子确保题目不重复。还定义了辅助函数简化程序操作。
摘要由CSDN通过智能技术生成

数独游戏-C语言实现

目标

写一个数独游戏,有以下功能:

1:能随机产生题目并给出答案。

2:求解输入的题目并输出答案。

实现说明

参照百度百科等资料可以知道求解数独的主要算法是:1.通过行、列和宫格确定可填数字。2.所有可行数字逐一填入得到结果。本程序求解数独部分也采用这样的算法。而生成题目的算法是:

  1. 随机产生一个长度为9的一维数组,元素是随机产生的1到9的不同数字。

比如为root = [1, 4, 3, 5, 6 ,7, 8 ,9, 2].

  1. 先获得一个填满的九宫格accord。
  2. 假如九宫格accord的第一行为[6, 4, 5, 7, 3, 9, 8, 1, 2], 则可获得的九宫格squa的第一行第一列元素这样产生:看accord对应元素为6,则看root中6后一位的数为7,则所求数字为7。以此类推。
  3. 根据难度随机去除一定数量的空格则得到了随机产生的数独题目。

下面介绍本程序的主要难点和创新点:

  1. 解数独的递归法。首先要定义一个检查函数judge用于判断某个数字在某个位置是否合适,进而根据找到的递归头即至最后一个位置后,分是否为0两种情况,否则,继续递归。

  2. 随机产生1到9之间的数。由于编译器自带函数rand会出现元素不变的确点,所以使用系统时间为种子,并引入全局变量index,使得时间差加大,避免固定不变。

  3. 定义各种函数简化程序。本程序定义了fprintf用于打印九宫格,定义reRank来获取元素在数组中位置等,简化了程序。

结果

下面是分别选择1(产生题目)和2(计算数独)后的结果图:

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z0w8LVZw-1593416471669)(fig2.png)]

代码:

语言: 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
  • 9
    点赞
  • 94
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值