用C语言写的解数独的程序。在linux下测试成功运行。

效果如图:

这是带解的数独,需要填写的部分用数字0代替。

这是程序运行后的效果图。看看,数独已经搞定啦~~~

程序源码如下:

#include <stdio.h>
#include <stdlib.h>#define SIZE 9
#define get_low_bit(x) ((~x&(x-1))+1)struct{int left;char num; char try;
}board[SIZE][SIZE];int bit2num(int bit)
{switch(bit){case 1:case 2:return bit;  case 4:return 3;case 8:return 4;case 16:return 5;case 32:return 6;  case 64:        return 7;   case 128:return 8;  case 256:return 9;}
}void printf_res()
{int i, j, k;   for(i=0; i<SIZE; i++){if(i%3==0)    {for(j=0; j<SIZE*2+4; j++)putchar('-');putchar('\n');}       for(j=0; j<SIZE; j++){if(j%3==0)putchar('|');if(board[i][j].num > 0)printf("\033[0;31m%2d\033[0m", board[i][j].num);elseprintf("%2d", board[i][j].try);}   printf("|\n");}for(i=0; i<SIZE*2+4; i++)putchar('-');putchar('\n');
}void sub(int i, int j, int bit)
{int k, m;  for(k=0; k<SIZE; k++){board[k][j].left &= ~bit;board[i][k].left &= ~bit;}       for(k=i/3*3; k<(i/3+1)*3; k++)for(m=j/3*3; m<(j/3+1)*3; m++)board[k][m].left &= ~bit;
}void init()
{int i, j;  for(i=0; i<SIZE; i++)for(j=0; j<SIZE; j++)if(board[i][j].num > 0)sub(i, j, 1<<(board[i][j].num-1));else if(board[i][j].try > 0)sub(i, j, 1<<(board[i][j].try-1));
}void add(int i, int j, int bit)
{int k, m;for(k=0; k<SIZE; k++){board[k][j].left |= bit;board[i][k].left |= bit;}for(k=i/3*3; k<(i/3+1)*3; k++)for(m=j/3*3; m<(j/3+1)*3; m++)board[k][m].left |= bit;
}void solve(int pos)
{int i=pos/SIZE;   int j=pos%SIZE;    int bit, left;if(pos == SIZE*SIZE){printf_res();exit(0);      }if(board[i][j].num > 0)solve(pos+1);   elsefor(left=board[i][j].left; left; left&=(left-1)){bit = get_low_bit(left);sub(i, j, bit);board[i][j].try = bit2num(bit);solve(pos+1);add(i, j, bit);board[i][j].try=0;init();      }
}int main()
{int i, j, c;for(i=0; i<SIZE; i++)for(j=0; j<SIZE; j++){while((c=getchar())<'0' || c>'9');board[i][j].num = c-'0';board[i][j].try = 0;board[i][j].left = 0x0001FF;      }               init();solve(0);return 0;
}

C语言——解数独程序[源码]相关推荐

  1. c语言数独程序源码,c语言编程:优化回溯解数独程序

    上次在博客上发了一篇<C语言:回溯解数独程序>.实在很粗糙,效率相当差.正如在群里一位朋友说的: 你能不能别像傻瓜式一样从左到右从上到下这样搜索呢?如果你这样,我出第一行是空的数独题,那你 ...

  2. c语言免杀程序源码,Window下基于C/C++源码免杀理论及思路(新手篇)

    作者:冷锋(LengF) [BHST] 博客:www.81sec.com      时间:2011-5-22 0x00 概述 最近搞一个国外的网站,对方是用的赛门铁克的诺顿杀毒软件,而内网又只对外开放 ...

  3. 振动传感器的c语言程序,单片机红外对射传感器实验详解 附程序源码

    #include #define                            BUF_LENTH              128                            // ...

  4. 微信小程序源码删除解决办法解包

    本实战教程将一步步告诉你如何"反编译"获得其它小程序的源代码,包括"解包"和"源码还原"两篇,主要参考了看雪论坛.V2EX.GitHub 等 ...

  5. 记一次微信小程序源码反解包

    1 安装Nodejs 一 下载安装包:https://nodejs.org/en/download/ 安装完成后在安装目录下新建两个文件夹: node-cache node-global (这是用来放 ...

  6. 【小程序源码】星座运势,周公解梦下载

    这是一款以星座运势查询,周公自定义解梦为主的一款小程序 多个功能包含如下: 星座查询 星座运势查询 十二生肖查询 生肖运势查询 星座配对 生肖配对 配对排行榜 星盘查询 周公解梦--等等大家自行研究吧 ...

  7. 小程序源码:星座运势,周公解梦流量主微信小程序

    这是一款以星座运势查询,周公自定义解梦为主的一款小程序 内支持流量主模式插入 多个功能包含如下: 星座查询 星座运势查询 十二生肖查询 生肖运势查询 星座配对 生肖配对 配对排行榜 星盘查询 周公解梦 ...

  8. 小程序源码:星座运势,周公解梦-多玩法安装简单

    这是一款以星座运势查询,周公自定义解梦为主的一款小程序 内支持流量主模式插入 多个功能包含如下: 星座查询 星座运势查询 十二生肖查询 生肖运势查询 星座配对 生肖配对 配对排行榜 星盘查询 周公解梦 ...

  9. 星座运势,周公解梦流量主微信小程序源码下载

    这是一款以星座运势查询,周公自定义解梦为主的一款小程序 内支持流量主模式插入 多个功能包含如下: 星座查询 星座运势查询 十二生肖查询 生肖运势查询 星座配对 生肖配对 配对排行榜 星盘查询 周公解梦 ...

最新文章

  1. F# 4.5提供Spans、Match!等特性
  2. IOS 开发之-- textfield和textview,return键的改变,点击return键
  3. 他们花一百万让你的票圈广告更好看,还被ACM点了赞
  4. 检查卷位图时发现损坏怎么修复_中频弯管严密性如何测试?怎么修复中频弯管?...
  5. 为什么ubuntu64位下C语言for循环不能超过2147483647次?(size_t )
  6. 2020 操作系统第四天复习(知识点总结)
  7. Python 之 使用 PIL 库做图像处理
  8. unittest学习记录
  9. 防止网页后退--禁止缓存
  10. 95-10-180-启动-Mx4jLoader
  11. 翁恺老师C语言学习笔记(八)数组
  12. mysql5.6.4安装_win 7 64 mysql 5.6.4 安装
  13. 使用itertools建立词表
  14. 达人评测 华为watch gt2和gt选哪个好
  15. nginx: [emerg] invalid log level “Files“ in C:\Program Files (x86)\phpstudy_pro\Extensions\Nginx1.16
  16. 互联网医院系统软件开发|互联网医院管理系统开发的好处
  17. 【安卓R 源码】获取音频焦点和释放音频焦点
  18. C# 浅拷贝与深拷贝
  19. 电子驻车系统(拉索式)
  20. 现在开始 · 入门编程

热门文章

  1. #define 和typedef的区别
  2. 产品 • B端和C端产品经理有什么区别?
  3. CLSR 11.1直接寻址表
  4. [vijos 1770]大内密探
  5. iOS 启动优化和安装包瘦身
  6. 3D模型欣赏:MR4概念机器人 材质处理细致,金属质感细致
  7. Android Path之Direction.CW、Direction.CCW
  8. MOS管符号特性规则
  9. reactos操作系统实现(6)
  10. 华为matebook X 笔记本没开什么程序,有时经常慢卡