c语言数独出题程序,我用C语言写解数独程序(一)
我要用C语言写一个解数独题目的程序,从我刚开始接触数独的时候,我就这样告诉自己。记得那是暑假的一天。在家闲来无事,就翻开了以前买的一本
《数独》。从看前面的例题开始,然后自己解第一个题,之后便一发不可收拾。彻彻底底迷上了这9个数字的各种组合变幻。刚好那时有在自学点C语言(说是学习,其实也就是买了几本书看看,上机的时间很少,没条件啊),就想着如果能用C语言写一个解数独的程序那多好啊!那样在同学面前说了N久的“学”编程也能稍稍兑点现了撒。顺便再吹吹牛,得意得意。可是那是自己也就会写
HELLO WORLD
啊(虽然现在也差不多,嘿嘿)。就一直搁浅了这个计划,只是自己天天用笔算,有时候一两个小时都解不出来,但我还是坚持,我喜欢解出题目的成就感,大家是不是都有这样的感觉呢?
直到这个暑假,家里给买了电脑(不容易啊,我盼了N久哩)。就慢慢想着怎么解题了。不过,你知道的。我啥也不会啊,算法,数据结构,都晕着呢。不过我心里还是有一个朦胧的想法,并且相信自己能实现这个想法。关键是跨出那一步。有些事看起来很难,其实只要能跨出第一步,就是成功的一半了。
我跨出了那一步!
我想实现的第一个功能就是数独第一页交给我的解题方法:夹逼法(是不是呢?这个名字书上好像没有明确的定义)。就是3行中有两行都有数字A,然后然后找出没有数字A的那一行再根据列填出数字A.(说的不清楚,呜呜)
还有当我发现一个格子有两个待选的数而现在又不能确定的时候,可以把这两个数字和位置记录下来,等这两个数字其中一个确定,那么另一个也可以确定了。
还有当一行或一列或哪个小九宫格有8个数字的时候,最后一个数字也就可以确定下来了。
还有用夹逼法遍历完9行之后,再遍历9列。方法是把数独翻转90°就可以了。因为这样只要用一个函数来解就可以了。
我只完成了上面这几个功能模块,还好,数独初级的题目能够“秒杀”。
刚看到屏幕输出“解题完成”这几个字的时候,真兴奋,开心。每天熬到半夜总算有些许回报了。
上面的是题目,下面的解好的题目。不过被顺时针旋转了一下还没转回来的。呵呵。
能帮我写个函数转回来吗?~_~
虽然我算法和数据结构基础都很差。但我还是能依靠自己的小小想象力解决它。
关键是踏出第一步。后续把的程序整理整理。多完成几个模块,它的下一个目标,
“秒杀”中级数独。不过在这之前,我认为我极有必要去好好学点算法和数据结构的知识,
还有多上机敲代码,好记性还不如烂笔头呢.呵呵,我相信我能完成!!!
关于解数独,我觉得关键在于数据。计算机的强项就是操控数据撒
数据的设计
主数组用于保存整个数组的信息:SoDu[10][10] (为计算方便,第一个元素不用,下标刚好可以对应9)
整个题目已经完成的数字数:ach_Number; (为81时就解完题目啦)
保存每个数字填入题目的个数:ach_Times[10] (第一个元素不使用,下标第i个元素值代表数字i已填入多少个。
每行每列每个小九宫格的数据信息:
a) ach_Line [10]; //表示每行已经完成的数字数
b) ach_Row [10]; //没列已经完成的数字数
c) ach_Xiao [10]; //表示每个小九宫格已经完成的数字数
从九行的角度看整个数组题目: ach_LineNum[10][10]; //ach_LineNum[i][j] 若值为1表示第i行的数字 j
已经填入。以此类推,从列的角度来看是 ach_RowNum[10][10];
从每个小九宫格的角度来看是 ach_XiaoNum[10][10].
刚开始我是把这些数据声明成全局变量,但是这不利于函数的抽象,因为需要在多个函数中操作这些变量。所以我把它们并入一个结构体变量,那么只要向函数传递一个指针就可以实现这些数据的操作了。好的,整理一下就是:
struct SoduData{
int SoDu[10][10];
int ach_Times[10];
int ach_Line[10], ach_Row[10] , ach_Xiao[10];
int ach_LineNum[10][10], ach_RowNum[10][10],
ach_XiaoNum[10][10];
int ach_Number;
};
英语不咋地,声明的数据名字奇奇怪怪的。好吧,英语也是重点学习的对象
不过22号有自学考试,我地格填呐。3科全挂都有希望。我都没看的。
临时抱佛脚吧,希望不要挂的太惨。回来之后安心写的程序。C语言!!!
My Name Is 影霖魂
c语言数独出题程序,我用C语言写解数独程序(一)相关推荐
- python手写字体程序_深度学习---手写字体识别程序分析(python)
我想大部分程序员的第一个程序应该都是"hello world",在深度学习领域,这个"hello world"程序就是手写字体识别程序. 这次我们详细的分析下手 ...
- 彩票中奖java程序 随机30选7_写一个彩票程序:30选7
1. 写一个彩票程序:30选7.随机(1~30之间)生成7个随机数,注意不能重复.然后从键盘输入7个数,对比7个数是否与随机数有相同的.最后显示"中了几个号".同时,如果中了7个号 ...
- python数独游戏源代码100行_python实现自动解数独小程序
跟朋友最近聊起来数独游戏,突发奇想使用python编写一个自动计算数独解的小程序. 数独的规则不再过多阐述,在此描述一下程序的主要思路: (当前程序只针对于简单的数独,更复杂的还待深入挖掘) 1.计算 ...
- Python果然不得了,数独都能轻松解决?python秒解数独了解下?
数独的规则 1.数字 1-9 在每一行只能出现一次. 2.数字 1-9 在每一列只能出现一次. 3.数字 1-9 在每一个 3x3 宫内只能出现一次.3x3 的宫内为A1-C3,A4-C6,A7-C9 ...
- 单片机中段程序_单片机外部中断详解及程序
单片机在自主运行的时候一般是在执行一个死循环程序,在没有外界干扰(输入信号)的时候它基本处于一个封闭状态.比如一个电子时钟,它会按时.分.秒的规律来自主运行并通过输出设备(如液晶显示屏)把时间显示出来 ...
- 【算法题】解数独-用深度优先搜索(DFS)算法解数独
描述 输入一个数独棋盘,用0代表待填的空格 输出数独的一个解 示例 输入: 0 9 2 4 8 1 7 6 3 4 1 3 7 6 2 9 8 5 8 6 7 3 5 9 4 1 2 6 2 4 1 ...
- C语言||暴力算法解数独
前言 前几天在玩解数独游戏时,发现有点费时间.心血来潮想实现一个解数独的c语言程序,根据我在晚解数独游戏的思路,采用了暴力算法求解.在数组维数的选择上,我选择了用一维数组实现. 分析 其实暴力算法求解 ...
- c语言程序结果 856400,C语言程序设计答案(黄保和编)第3章.pdf
厦门大学本科生公共课 C 程序设计基础 教材习题答案 第三章 结构化程序设计 第 1 页 共 4 页 一 思考题一 思考题 1 顺序结构的语句有哪些 顺序结构的语句有哪些 表达式语句 空语句 复合语句 ...
- python数独游戏源代码100行_python实现解数独程序代码
偶然发现linux系统附带的一个数独游戏,打开玩了几把.无奈是个数独菜鸟,以前没玩过,根本就走不出几步就一团浆糊了. 于是就打算借助计算机的强大运算力来暴力解数独,还是很有乐趣的. 下面就记录一下我写 ...
最新文章
- 【Java】leetCode 21 合并两个有序链表
- 为什么总线要用一根来表示一bit
- 第32讲:实时处理利器 mitmproxy 的使用
- 拼团功能,开团并发问题,使用数据库行锁方案
- 浅谈shell中的clear命令实现
- [css] 说说你对table-layout的理解,它有什么运用场景?
- LeetCode 486. 预测赢家(博弈DP)
- [转]python3之模块psutil系统性能信息
- mysql数据设置浮动_浮动float
- python中darks_YOLOv4: Darknet 如何于 Ubuntu 编译,及使用 Python 接口
- 经典算法题每日演练——第二十题 三元组
- java集合框架之LinkedList
- MPM模型及ab压力测试
- mib文件在服务器的什么位置,MIB文件简单分析
- Jquery给HTML元素绑定按键事件-回车事件
- 《卓有成效的管理者》——学习心得(八)
- 使用计算机对炼钢过程进行实时监控,新钢炼钢-轧钢生产过程缓冲环节的解析、优化与控制 张志宏...
- 树莓派从零开始快速入门第8讲——单总线(以DS18B20为例)
- 魔百盒CM211-1 GZ-2+16g 广东移动增强版 官方备份+免拆线刷固件及教程
- 10的负次方的名称怎么称呼?