我要用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语言写解数独程序(一)相关推荐

  1. python手写字体程序_深度学习---手写字体识别程序分析(python)

    我想大部分程序员的第一个程序应该都是"hello world",在深度学习领域,这个"hello world"程序就是手写字体识别程序. 这次我们详细的分析下手 ...

  2. 彩票中奖java程序 随机30选7_写一个彩票程序:30选7

    1. 写一个彩票程序:30选7.随机(1~30之间)生成7个随机数,注意不能重复.然后从键盘输入7个数,对比7个数是否与随机数有相同的.最后显示"中了几个号".同时,如果中了7个号 ...

  3. python数独游戏源代码100行_python实现自动解数独小程序

    跟朋友最近聊起来数独游戏,突发奇想使用python编写一个自动计算数独解的小程序. 数独的规则不再过多阐述,在此描述一下程序的主要思路: (当前程序只针对于简单的数独,更复杂的还待深入挖掘) 1.计算 ...

  4. Python果然不得了,数独都能轻松解决?python秒解数独了解下?

    数独的规则 1.数字 1-9 在每一行只能出现一次. 2.数字 1-9 在每一列只能出现一次. 3.数字 1-9 在每一个 3x3 宫内只能出现一次.3x3 的宫内为A1-C3,A4-C6,A7-C9 ...

  5. 单片机中段程序_单片机外部中断详解及程序

    单片机在自主运行的时候一般是在执行一个死循环程序,在没有外界干扰(输入信号)的时候它基本处于一个封闭状态.比如一个电子时钟,它会按时.分.秒的规律来自主运行并通过输出设备(如液晶显示屏)把时间显示出来 ...

  6. 【算法题】解数独-用深度优先搜索(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 ...

  7. C语言||暴力算法解数独

    前言 前几天在玩解数独游戏时,发现有点费时间.心血来潮想实现一个解数独的c语言程序,根据我在晚解数独游戏的思路,采用了暴力算法求解.在数组维数的选择上,我选择了用一维数组实现. 分析 其实暴力算法求解 ...

  8. c语言程序结果 856400,C语言程序设计答案(黄保和编)第3章.pdf

    厦门大学本科生公共课 C 程序设计基础 教材习题答案 第三章 结构化程序设计 第 1 页 共 4 页 一 思考题一 思考题 1 顺序结构的语句有哪些 顺序结构的语句有哪些 表达式语句 空语句 复合语句 ...

  9. python数独游戏源代码100行_python实现解数独程序代码

    偶然发现linux系统附带的一个数独游戏,打开玩了几把.无奈是个数独菜鸟,以前没玩过,根本就走不出几步就一团浆糊了. 于是就打算借助计算机的强大运算力来暴力解数独,还是很有乐趣的. 下面就记录一下我写 ...

最新文章

  1. 【Java】leetCode 21 合并两个有序链表
  2. 为什么总线要用一根来表示一bit
  3. 第32讲:实时处理利器 mitmproxy 的使用
  4. 拼团功能,开团并发问题,使用数据库行锁方案
  5. 浅谈shell中的clear命令实现
  6. [css] 说说你对table-layout的理解,它有什么运用场景?
  7. LeetCode 486. 预测赢家(博弈DP)
  8. [转]python3之模块psutil系统性能信息
  9. mysql数据设置浮动_浮动float
  10. python中darks_YOLOv4: Darknet 如何于 Ubuntu 编译,及使用 Python 接口
  11. 经典算法题每日演练——第二十题 三元组
  12. java集合框架之LinkedList
  13. MPM模型及ab压力测试
  14. mib文件在服务器的什么位置,MIB文件简单分析
  15. Jquery给HTML元素绑定按键事件-回车事件
  16. 《卓有成效的管理者》——学习心得(八)
  17. 使用计算机对炼钢过程进行实时监控,新钢炼钢-轧钢生产过程缓冲环节的解析、优化与控制 张志宏...
  18. 树莓派从零开始快速入门第8讲——单总线(以DS18B20为例)
  19. 魔百盒CM211-1 GZ-2+16g 广东移动增强版 官方备份+免拆线刷固件及教程
  20. 10的负次方的名称怎么称呼?

热门文章

  1. java实现简单的银行存款取款系统
  2. Linux命令 - su命令
  3. python 分词 jieba
  4. WNDR4300刷OpenWrt手记
  5. 小米盒子访问计算机硬盘,无需电脑教你手机数据传到小米盒子外置硬盘的教程...
  6. VaaS 之“成长史”
  7. Java程序 switch语句
  8. (笔记总结)单片机与单片机的通信
  9. [数论 反演] BZOJ 4833 最小公倍佩尔数
  10. 区块链+慈善究竟帮助过谁?