1.15 构造数独
构造 数独 1.15
2023-09-27 14:27:01 时间
(一)
用回溯法构造数独
#include <iostream> #include <cstring> #include <ctime> #include <cstdio> #include <cstdlib> using namespace std; int sudu[9][9]; void sudu_print(int sudu[][9]) { for(int i = 0; i < 9; ++i) { for(int j = 0; j < 9; ++j) { cout << " " << sudu[i][j]; } cout << endl; }; } bool is_digital_sudu(int sudu[][9], int i, int j) { for(int k = 0; k < 9; ++k) { if(k == j) continue; if(sudu[i][k] == sudu[i][j]) return false; } for(int k = 0; k < 9; ++k) { if(k == i) continue; if(sudu[k][j] == sudu[i][j]) return false; } int p = i / 3; int q = j / 3; for(int m = 3 * p; m < 3 * p + 3; ++m) { for(int n = 3 * q; n < 3 * q + 3; ++n) if(m != i && n != j && sudu[m][n] == sudu[i][j]) return false; } return true; } int main() { srand(time(0)); memset(sudu, 0, sizeof(sudu)); for(int i = 0; i < 9; ++i) { int temp = rand() % 81; sudu[temp/9][temp%9] = i + 1; } int k = 0; while(1) { int x = k / 9; int y = k % 9; while(1) { sudu[x][y]++; if(sudu[x][y] == 10) { sudu[x][y] = 0; --k; break; }else if(is_digital_sudu(sudu, x, y)) { k++; break; } } if(81 == k) { sudu_print(sudu); return 0; } } return 0; }
在LINUX下运行的话,先运行命令:g++ 文件名称.cpp 然后假设程序没有错误的话。那么在该文件夹以下会自己主动生成一个文件:.out。
所以这个时候继续在该文件夹下运行:
./a.out
(二)
利用书上的置换的方法,简单。
。
。。
。
。
相关文章
- hdu2276 矩阵构造
- hdu4975 行列和构造矩阵(dp判断唯一性)
- API接口DTO测试数据构造的一个方式
- flutter系列之:builder为构造器而生
- 自己动手构造编译系统:编译、汇编与链接2.1.6 编译优化
- 自己动手构造编译系统:编译、汇编与链接2.5.2 符号解析
- 自己动手构造编译系统:编译、汇编与链接导读
- 【Harmony OS】【FAQ】鸿蒙应用开发问题分享(字体/构造器)
- HDU 5916 Harmonic Value Description (构造)
- CodeForces 686B Little Robber Girl's Zoo (构造冒泡排序)
- 函数式编程思想---函数式编程思想:先构造计算树,然后执行计算树
- 软件的复杂性与构造定律
- 小程序之程序构造器App()
- 《语义网基础教程(原书第3版)》—— 3.4 处理一个开放世界的构造子
- HMAC是一种利用哈希函数构造消息认证码的方法
- 【Harmony OS】【FAQ】鸿蒙应用开发问题分享(字体/构造器)
- 从单元测试到基于每日构造的自动测试
- 原型设计模式prototype-构造js自己定义对象
- 【uoj#143】[UER #5]万圣节的数列 构造
- 【uoj#225】[UR #15]奥林匹克五子棋 构造