数独生成:

#include"sudoku.h"
#include<time.h>
using namespace std;char field[200000000];
void Sudoku::openfile(const char* name)
{errno_t err;err = fopen_s(&file1, name, "w+");cout << "打开写文件sudoku.txt" << endl;
}//生成数独终局
void Sudoku::createSudoku(int n)
{openfile("sudoku.txt");int trans[9] = { 0,3,6,1,4,7,5,2,8 };//每一行的移动情况int flag = 0;//终局个数int m = 0;for (int i = 0; i < 6; i++)//4到6行的六种排列方式{if (flag >= n){break;}if (i){//交换4到6行next_permutation(trans + 3, trans + 6);     //全排列函数,输出所有比当前排列大的排列,顺序是从小到大。trans[6] = 2, trans[7] = 5, trans[8] = 8;}for (int j = 0; j < 6; j++)//7到9行的六种排列方式{if (flag >= n)break;if (j)//交换7到9行next_permutation(trans + 6, trans + 9);   //全排列函数char row[10] = "412356789";//先生成第一种情况for (int k = 0; k < 40320; k++)//第一行的8!种排列方式{if (flag >= n)break;if (k)next_permutation(row + 1, row + 9);//第一个数字不能换//生成一个终局for (int i = 0; i < 9; i++){for (int j = 0; j < 9; j++){field[m + flag] = row[(j + trans[i]) % 9];m += 1;}field[(m - 1) + flag] = '\n';}field[m + flag] = '\n';flag++;}}}    fputs(field, file1);
}

解数独

#include"sudoku.h"
#include<fstream>void Sudoku::DFS(int count)
{if (count == 81){for (int i = 0; i < 9; ++i){for(int j = 0; j < 8; ++j)fprintf(file2,"%c ", range[i][j]);fprintf(file2, "%c\n", range[i][8]);}fputs("\n",file2);return;}int row = count / 9;  //x坐标int col = count % 9;  //y坐标if (range[row][col] == '0'){for (int i = 1; i <= 9; i++){range[row][col] = i + '0';int flag = 1;int j;//行for (j = 0; j < 9; j++)    {if (range[row][j] == range[row][col] && j != col)flag = 0;}//列for (j = 0; j < 9; j++){if (range[j][col] == range[row][col] && j != row)flag = 0;}//宫int baseRow = row / 3 * 3;int baseCol = col / 3 * 3;for (j = baseRow; j < baseRow + 3; j++){for (int k = baseCol; k < baseCol + 3; k++){if (range[j][k] == range[row][col] && (j != row || k != col))flag = 0;}}//如果这一个点通过if (flag){DFS(count + 1);//继续下一个}}range[row][col] = '0';}elseDFS(count + 1);
}
void Sudoku::solveSudoku(string path)
{ifstream file(path);errno_t err;err = fopen_s(&file2, "sudoku.txt", "w+");cout << "打开sudoku.txt" << endl;if (file){int total = 0;string temp[9];string str;int line = 0;while (total < 1000000 && getline(file, str)){temp[line] = str; line++;if (line == 9)//读入了一个数独{for ( int i = 0; i < 9; i++)for (int j = 0; j < 9; j++){range[i][j] = temp[(__int64)i][2 * (__int64)j]; //处理格式,读入偶数列if (range[i][j] < '0' || range[i][j] > '9'){break;}}getline(file, str);//格式问题line = 0;total++;long count = 0;DFS(0);}}}elsecout << "error:未找到该路径,请确认路径" <<path << endl;}

数独问题求解代码总结相关推荐

  1. 数独问题求解二:解题思路(1)

    数独问题求解二:解题思路(1) 初拿到任务,我对需求中的许多问题并没有太多思路,于此,我拿着题目在百度以及Google进行了搜索,很巧的是我找到了很多前人对该类项目的总结,这对我的解题有了很大的帮助, ...

  2. web api 数独 求解代码 使用穷举回溯法

    先看效果 首先是html代码 <!DOCTYPE html> <html lang="zh-cn" data-ng-app="app"> ...

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

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

  4. python实现解数独程序代码

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

  5. Linux数独小游戏C语言,发一个自己制作的数独游戏代码!

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 void draw(int i,int j) {setcolor(5); rectangle(45+j*30,45+i*30,36+(j+1)*30,36 ...

  6. 求解数独难题, Sudoku问题(回溯)

    Introduction : 标准的数独游戏是在一个 9 X 9 的棋盘上填写 1 – 9 这 9 个数字,规则是这样的: 棋盘分成上图所示的 9 个区域(不同颜色做背景标出,每个区域是 3 X 3 ...

  7. 软件工程大作业——数独游戏

    软件工程大作业--数独游戏1 一.PSP表格 二.问题分析 三.系统设计 四.具体实现 五.单元测试 六.程序性能及质量分析 七.GUI 八.总结 代码地址:https://github.com/fr ...

  8. python30行代码_仅利用30行Python代码来展示X算法

    假如你对数独解法感兴趣,你可能听说过精确覆盖问题.给定全集 X 和 X 的子集的集合 Y ,存在一个 Y 的子集 Y*,使得 Y* 构成 X 的一种分割. 这儿有个Python写的例子. X = {1 ...

  9. 一次Java解析数独的经历,java面试题,java高级笔试题

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 1. ...

最新文章

  1. iphone8p百度云认证_探秘百度数据工厂Pingo的多存储后端数据联合查询技术
  2. 对科大讯飞的过度宽容就是对科大讯飞的伤害,从科大讯飞裁员说起
  3. EntityFramework 7.0之初探【基于VS 2015】(十)
  4. 笔记-项目整体管理-变更管理-变更管理的原则
  5. caffe matio问题
  6. 手机调用系统的拍照和裁剪功能,假设界面有输入框EditText,在一些手机会出现点击EditText会弹出输入法,却不能输入的情况。...
  7. 一篇关于Dataset与泛型、自定义集合的讨论
  8. 21个Docker 命令
  9. Windows可以往外ping,外部却ping不通本机
  10. 后台传一个状态值,如果在vue设置成正常停用?
  11. vue3安装WangEditor富文本编辑器v5版本
  12. 怪物之心无法触发_《勇者斗恶龙 怪兽篇:旅团之心》怪物生方法及生规则研究 - 电玩巴士...
  13. 视频 Docker 学习(高级篇)
  14. 新手php环境一键安装包,PHP运行环境一键安装包(phpStudy2013)
  15. 如何在CentOS 7上安装Yarn
  16. 架构师之路(二)-概念架构
  17. TF-IDF算法总结
  18. 计算机启动相机代码,如何在win7系统中启动相机
  19. 什么是缓存雪崩、击穿、穿透?
  20. Android攻城狮datePicketimePicker

热门文章

  1. 如何判断n(n-1)/2的奇偶性【数学问题】
  2. 几十款收费软件现在免费了
  3. keil5固件库版本的工程建立
  4. 金融知识小科普 - 北向资金
  5. klouderr什么意思_cheerful是什么意思_cheerful的翻译_音标_读音_用法_例句_爱词霸在线词典...
  6. COMSOL中内置数学函数及内置运算符
  7. CSDN孟岩:区块链的命门是通证经济系统,你需要看懂这2大标准5要素
  8. 农业生产中的机器学习技术
  9. WordPress主题下载Sparkling个人简洁博客主题
  10. ALLHiC: 辅助组装简单的二倍体基因组