突发奇想,想解决一个数独的求解算法

直接贴代码吧!

#include <stdio.h>
#include <sqlite3.h>
#include <string.h>
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <time.h>
int n=9;
int total=0;
int arr[9][9]={0};
int stop = 0;
char buff[2014]="";sqlite3 *db;void format_data()
{for(int i=0;i<n;i++){for(int j=0;j<n;j++){arr[i][j]=0;}}
}void save_data(){memset(buff,0,sizeof(buff));for(int i=0;i<n;i++){for(int j=0;j<n;j++){if(i==0 && j==0)sprintf(buff,"%d",arr[i][j]);elsesprintf(buff,"%s,%d",buff,arr[i][j]);}}std::cout<<"buff:"<<buff<<std::endl;}bool isEnable(int row,int col){for(int i=0;i<n;i++){if((arr[i][col] == arr[row][col]) && (i != row))return false;}for(int j=0;j<n;j++){if((arr[row][j] == arr[row][col]) && (j != col))return false;}int x=row/3;int y=col/3;x = x*3;y = y*3;for(int i=x;i<x+3;i++){for(int j=y;j<y+3;j++){if((arr[i][j] == arr[row][col]) && (i!=row) &&(j!=col))return false;}}return true;
}void print(){for(int i=0;i<n;i++){for(int j=0;j<n;j++){std::cout<<arr[i][j]<<" ";}std::cout<<std::endl;}
}void queen(int row,int num){if(stop == 1)return ;if(num >= 9 && row == n){stop = 1;total++;//std::cout<<"第"<<total<<"种解法:"<<std::endl;//print();save_data();return ;}if(row == n){queen(0,num+1);return ;}for(int col=0;col<n;col++){if(arr[row][col] == 0 || arr[row][col] == num ) {int flag = 0;if(arr[row][col] == num)flag = 1;arr[row][col]=num ;if(isEnable(row,col))queen(row+1,num);if(flag != 1)arr[row][col]=0;}}
}void rand_arr(int num){sleep(1);format_data();srand(time(NULL));int count = 0;int value = random() % 10;arr[0][0] = value;while(count < num){int n = random() % 82;int value = random() % 10;//std::cout<<"n = "<<n<<" ";int row = n/9;int col = n%9;if(arr[row][col] == 0){if(value <= 0)continue;arr[row][col] = value;if(isEnable(row,col))count++;elsearr[row][col] = 0;}}std::cout<<std::endl;//print();//std::cout<<std::endl;
}int main()
{char *zErrMsg = 0;char sql[1024];      //存放sqlite执行命令int rc;int len = 0;memset(buff,0,sizeof(buff));rc = sqlite3_open("sudo.db",&db);   //打开数据库if(rc != SQLITE_OK){printf("zErrMsg = %s\n",zErrMsg);return -1;}memset(sql,'\0',sizeof(sql));strcpy(sql,"create table sudo(id integer PRIMARY KEY AUTOINCREMENT,value varchar(256));");//创建表sqlite3_exec(db,sql,0,0,&zErrMsg);  //执行sqlite命令语句int cnt=0;while(cnt<100000){stop = 0;total = 0;rand_arr(20);queen(0,1);std::cout<<"total="<<total<<std::endl;if(total <=0)continue;memset(sql,'\0',sizeof(sql));sprintf(sql,"insert into sudo(value) values('%s');",buff);    //插入数据rc = sqlite3_exec(db,sql,0,0,&zErrMsg);if(rc != SQLITE_OK){printf("zErrMsg = %s\n",zErrMsg);return -1;}cnt++;}int nrow = 0,ncolnum = 0;char **azResult;    //存放查询结果sqlite3_free(zErrMsg);sqlite3_close(db);      //关闭数据库return 0;
}

这是用深度优先查找算法解决的,从八皇后问题延伸到数独求解。

欢迎各位留言讨论.

一个简单数独求解的算法相关推荐

  1. java自动红包_Java一个简单的红包生成算法

    一个简单的红包生成算法,代码如下: /** * 红包 * @param n * @param money 单位:分 * @return **/ public static double[] redPa ...

  2. 用C语言实现一个简单的一元线性回归算法

    今天我们用C语言实现一个简单的线性回归算法:在代码前面我们在回顾一下线性回归. 线性回归是回归问题中的一种,线性回归假设目标值与特征是线性相关的,即满足一个多元一次方程式.通过构建损失函数,来求解损失 ...

  3. 用计算机画魔方的一个面,计算机求解魔方算法.pdf

    计算机求解魔方算法.pdf 第 1l卷第3期 计算技术与 自动化 VoI.11 N0.3 199Z年9月 COM PUTNG TECHNOLOGY AND AUToMATl0N Sept. 199Z ...

  4. 『开源』一个简单的 字符串计算 算法开源

    算法开发原因: 自己一直在 配置化编程 方面努力,希望 项目复杂的功能可以用 简单的 配置来完成: 于是 在自己的网站中,使用了一个自己写的 数据库框架,为了给框架提速,于是就 想将 少于 5000 ...

  5. 微信抢红包代码 python_用 Python 实现一个简单的微信红包算法

    今年过年各位一定在微信里抢了不少红包.那么当别人是手气王而你只抢到1分钱的时候,你有没有想过,如果你来实现红包的分配算法,会怎么写? 这里我给一个简单的实现方案. 基本思路就是,有多少个红包,就循环多 ...

  6. 一个简单的多机器人编队算法实现--PID

    由于一些资源链接失效,如下文档还可以使用: https://download.csdn.net/download/zhangrelay/9514411 用PID进行领航跟随法机器人编队控制 课题2:多 ...

  7. 简单的加密/解密算法_/c++

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_36557960/article/details/79299093 关于加密和解密问题,有的加密 ...

  8. 数独求解算法_我如何回到一个老问题,终于写了一个数独求解算法

    数独求解算法 by Ali Spittel 通过Ali Spittel 我如何回到一个老问题,终于写了一个数独求解算法 (How I came back to an old problem and f ...

  9. 数独求解算法效率对比结果

    在网上或是科技论文文献中,总是看到有人说自己的数独求解算法多牛,有时我为了验证他的算法有多牛,还把他的代码拷下来在自己的电脑上试一下,但结果还是让我比较失望的,如果你想知道你的算法有多牛,那就跑一下这 ...

最新文章

  1. 中科大计算机复试题目,中科大计算机复试笔试部分 09-15
  2. Guava学习笔记:Preconditions优雅的检验参数
  3. Linux下制作动图的软件,Linux 下制作Gif动画
  4. mysql 字符串的处理
  5. flutter 应用场景_【Flutter 1-12】Flutter手把手教程Dart语言——什么是泛型和泛型的使用场景...
  6. 如何解决每次打开office 都会出现正在配置的问题
  7. python与tensorflow知识点截图集锦(持续囤积)
  8. ×××送通知服务教程 Apple Push Notification Services Tutorial
  9. ubuntu命令查询版本和内核版本
  10. Python变量的作用范围
  11. ansible的delegate_to、connection、和local_action
  12. WCF系列之什么是WCF
  13. Fences隐藏桌面图标快捷方式箭头
  14. 《Qt 实战一二三》
  15. 数字人枫灵Lynn,获得江苏省文化产业周刊关注!
  16. python能用于unix吗_用Python实现低配的Unix Cron,一个能让程序在计划的时间运行的系统...
  17. 凝思系统机器名怎么查看_凝思操作系统Custom Linx安装教程
  18. diag矩阵(Diag矩阵计算公式)
  19. c语言macro pdf,C语言的宏macro的使用
  20. 12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用

热门文章

  1. 【Windows系统】win10系统假死,窗口不能动,鼠标能动或不能动,最后蓝屏显示错误码: VIDEO_DXGKRNL_FATAL_ERROR 的解决办法
  2. 用Tkinter打造自己的Python IDE开发工具(5)利用HP_tka模块设计自己的中文代码编辑器
  3. 有什么好技巧可以恢复电脑回收站丢失的文件呢
  4. 卷积神经网络手势识别之剪刀石头布
  5. Delphi类型区分——常数
  6. 简单安全的u盘杀毒软件
  7. windows下制作Ubuntu的U盘启动工具
  8. 通达OA未授权任意文件上传及文件包含漏洞分析学习
  9. linux删除用户出现user xxx is currently used by process xxx的解决方案
  10. SEO优化技术 - K站恢复快照收录排名