用最暴力的递归方式在所有可能的空间中寻找数独的解法。试了一下,不管多难的数独都能在1s内找到所有答案,所以也没有采取更智能的算法进行优化,如加入人的逻辑推理算法。

这里只是把一种最笨的方法分享出来,只是感叹现在的计算机运算能力太强大了。源码如下:

#include #include /*数独二维数组*/ int g_s[9][9] = {     {0,4,0,7,0,0,0,0,0}, {9,2,0,0,0,0,6,0,7}, {8,3,0,0,0,5,4,0,0}, {0,1,0,0,0,3,0,0,0}, {0,0,0,2,0,1,0,0,0}, {0,0,0,5,0,0,0,4,0}, {0,0,4,9,0,0,0,7,1}, {3,0,5,0,0,0,0,9,4}, {0,0,0,0,0,8,0,6,0} }; /*打印当前数独状态*/ int prt() {     int i = 0;     int j = 0;     for(i = 0;i < 9;i++)     {         for(j = 0;j < 9;j++)         {             printf("%d ",g_s[i][j]);         }         printf("\n");     }     getchar(); } /*获取一个位置当前所有可能的解*/ int get_all_num(int i,int j,int a[9]) {     int s[9] = {1,2,3,4,5,6,7,8,9};     int row,col,k;     /*删除当前行中已出现的值*/     for(col = 0;col < 9;col++)     {         k = g_s[i][col];         if(k != 0)         {             s[k-1] = 0;         }     }     /*删除当前列中已出现的值*/     for(row = 0;row < 9;row++)     {         k = g_s[row][j];         if(k != 0)         {             s[k-1] = 0;         }     }     /*删除当前九宫格中已出现的值*/     row = (i/3)*3;     col = (j/3)*3;     for(i = row;i < (row+3);i++)     {         for(j = col;j < (col+3);j++)         {             k = g_s[i][j];             if(k != 0)             {                 s[k-1] = 0;             }         }     }     i = 0;     for(k = 0;k < 9;k++)     {         if(s[k] != 0)         {             a[i] = s[k];             i++;         }     }          return i; } /*判断当前行是否合法*/ int check_row(int i,int num) {     int j = 0;     for(j = 0;j < 9;j++)     {         if(g_s[i][j] == num)         {             return 0;         }     }          return 1; } /*判断当前列是否合法*/ int check_col(int j,int num) {     int i = 0;     for(i = 0;i < 9;i++)     {         if(g_s[i][j] == num)         {             return 0;         }     }     return 1;          } /*判断当前九宫格是否合法*/ int check_block(int i,int j,int num) {     int row = (i/3)*3;     int col = (j/3)*3;     int k = 0;     int l = 0;          for(k = row;k < (row+3);k++)     {         for(l = col;l < (col+3);l++)         {             if(g_s[k][l] == num)             {                 return 0;             }         }     }          return 1; } /*尝试一个解*/ int try_one(int i,int j,int num) {     if(check_row(i,num) && check_col(j,num) &&         check_block(i,j,num))     {         g_s[i][j] = num;         //prt();         return 1;     }     return 0; } /*获取下一个要填空的位置*/ int get_next(int *pi,int *pj) {     int i = *pi;     int j = *pj;     int r = i;     int c = 0;     j++;     for(;r < 9;r++)     {         for(c = j;c < 9;c++)         {             if(g_s[r][c] == 0)             {                 *pi = r;                 *pj = c;                 return;             }         }         j = 0;     }     if(r == 9)     {         return 0;     }     *pi = r;     *pj = c;     return 1; } /*找到一个解*/ void finish() {     printf("\n find a solution: \n");     prt(); } /*处理一个位置*/ int do_one(int i,int j) {     int row = i;     int col = j;     int n = 0;     int k = 0;     int a[9] = {0};          /*当前位置有解,下一个位置*/     if(g_s[row][col] != 0)     {         /*获取下一个无解的位置*/         if(get_next(&row,&col))         {             /*对一下个位置递归操作*/             do_one(row,col);         }         /*都有解了,成功*/         else         {             finish();         }         /*当前位置有解,直接回溯*/         return;     }     /*当前位置无解*/     else     {         /*获取当前位置的所有可能解*/         n = get_all_num(i,j,a);                  for(k = 0;k < n;k++)         {             /*尝试所有可能的解,这里是重复操作,就不改了*/             if(try_one(i,j,a[k]))             {                 row = i;                 col = j;                 /*此位置找到合适的了,下一个*/                 if(get_next(&row,&col))                 {                         do_one(row,col);                 }                 /*当前位置已有解且没有下一个了,结束*/                 else                 {                     finish();                 }             }         }         /*要向前回溯,则这个位置找到的解无效,回溯前清0*/         g_s[i][j] = 0;         //prt();         return;     }      } int main() {     do_one(0,0);     return 0; }

c语言数独出题程序,C语言实现的数独解题程序相关推荐

  1. c语言自动出题器,c语言四则运算出题器

    c语言四则运算出题器,绝对的原创,绝对的无错误,绝对用最简单的知识完成难得问题. #include #include #include int a,n,nright=0,nwrong=0,flag5, ...

  2. c 应用程序多语言版本,c – 在win32 API应用程序中实现全球化/多语言功能

    Windows上多语言应用程序的基础是使用"资源".资源是附加在可执行文件末尾的块,它只包含数据,并以非常特定的方式格式化,以便Windows能够解释这些数据. 在资源中,您可以找 ...

  3. c语言编程 构建围墙,c语言程序设计朝盛 综合程序练习题.ppt

    c语言程序设计朝盛 综合程序练习题 综合程序练习题 综合程序练习题 大型程序设计的要求 综合程序练习题 综合程序练习题 大型程序设计题目分析: 1 打字练习 2 电子琴 3 简易画图板 4 贪吃蛇 5 ...

  4. 程序员语言也有鄙视链!某美团程序员爆料:筛选简历时,用go语言的基本不看!网友:当韭菜还当出优越感了!...

    程序员使用的语言有鄙视链吗?有人说有,有人说没有.一个美团员工发帖说,筛选简历时用go语言的基本不看.短短一句话,把对go语言的鄙视体现得淋漓尽致,难道go语言真的不如其他语言? 和他一样想法的前阿里 ...

  5. 让英文版windows 8支持非Unicode程序的语言方法

    Control Panel\Clock, Language, and Region 点击 Region change system locle 非Unicode程序的语言,只要将当前非Unicode程 ...

  6. c语言如何输入汉字_C语言入门的第一个小程序

    大部分程序员入门的第一个小程序都是Hello World,还记得当时大一的时候,我室友还特意为了这个发了个说说,现在想起来好有意思,哈哈好了废话不多说,直接干. (PS:如果学过自动忽略) #incl ...

  7. c语言设计一个自动报警的程序,C语言程序设计试题(B卷)..doc

    商洛学院2007-2008年度第一学期期末考试试题 课程:C语言程序设计(B卷) 适用班级:06物理教育(本)06生物(本) 一.填空题:(每空1分,共10分) 结构化程序设计所规定的三种基本的控制结 ...

  8. python语言程序设计嵩天-Python语言程序设计基础(第2版)嵩天课后答案

    嵩天.礼欣.黄天羽Python语言程序设计基础(第2版)习题答案本书提出了以理解和运用计算生态为目标的Python语言教学思想,在系统讲解Python语言语法的同时介绍了从数据理解到图像处理的14个P ...

  9. 【Groovy】使用 Groovy 语言开发服务器 Server 和客户端 Client 套接字程序 ( 服务器客户端完整代码示例 | 运行服务器端与客户端效果及过程分析 )

    文章目录 一.服务器端完整代码 Server.groovy 二.客户端完整代码 Client.groovy 三.运行服务器端与客户端效果及过程分析 一.服务器端完整代码 Server.groovy 参 ...

  10. c语言如何快速看懂别人的程序,探究如何快速看懂单片机程序方法

    在现实中,我相信有很多刚刚接触单片机的同学,简直是无从下手,打开一个程序,更会被复杂的结构和密密麻麻的代码吓到,产生退缩的想法,这篇文章带你了解一下单片机程序. 我对单片机的总结:"单片机其 ...

最新文章

  1. 跳表(SkipList)设计与实现(java)
  2. 中国电梯行业动态调研与未来发展趋势展望报告2022-2028年版
  3. Java 第7章 数组
  4. Zabbix监控——proxy 分布式监控配置
  5. 你离云计算还差一个云管平台(CMP)
  6. 管理运筹学软件计算机解咋看,运筹学软件结果解析总结计划题1-20210618123710.docx-原创力文档...
  7. linux 设置更新源为cd,技术|如何修复 apt-get update 无法添加新的 CD-ROM 的错误
  8. 434.字符串中的单词数
  9. 使用canvas实现贪吃蛇
  10. iPhone13再现粉屏问题,同时出现闪退/卡顿/重启?
  11. 蚁群算法(Ant Colony Optimization)
  12. 【论文笔记】基于深度学习的视觉检测及抓取方法
  13. 程序员如何培养第二技能?
  14. Cocos2D来制作横版过关游戏1
  15. 串口通信——S5PV210串口通信接口详解
  16. 台式机如何通过无线网卡释放热点?
  17. 人工智能 ---(01.基础知识)
  18. Matlab中的clc、clear、clear all、clf、close、close all解释
  19. 2018年ElasticSearch6.2.2教程ELK搭建日志采集分析系统(教程详情)
  20. vue 的axios 文件上传

热门文章

  1. 2021 书单推荐 | 15 本高分 AI 书籍,统统免费读
  2. 导热电池粘合剂市场现状及未来发展趋势
  3. mac软件推荐(适用m1)
  4. hive  explode(split(split_feild,‘split_char‘)) split_feild为null 整条数据会丢掉
  5. C#中调用OCX控件
  6. 日记记事本java实训,黑马学习日记  GUI实现简单记事本功能
  7. STM32F103ZE uIP DM9051 SPI以太网移植指南
  8. oracle设置密码永不过期
  9. 超水平发挥的秘密:放松的专注
  10. 基础图像处理 python+opencv